From 78844f578728a28358a51944928ec2d7ff9b19ad Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Mon, 9 Dec 2024 08:54:26 +0100 Subject: [PATCH] Attempt to merge master into #5376 --- LICENSE | 12 +- backend/README.md | 2 +- backend/mempool-config.sample.json | 6 +- backend/package-lock.json | 947 +++++---- backend/package.json | 14 +- .../__fixtures__/mempool-config.template.json | 4 +- backend/src/__tests__/api/common.ts | 6 +- backend/src/__tests__/config.test.ts | 6 +- backend/src/api/about.routes.ts | 2 +- backend/src/api/audit.ts | 27 +- .../bitcoin/bitcoin-api-abstract-factory.ts | 3 +- .../src/api/bitcoin/bitcoin-api.interface.ts | 18 + backend/src/api/bitcoin/bitcoin-api.ts | 7 +- .../src/api/bitcoin/bitcoin-core.routes.ts | 19 +- backend/src/api/bitcoin/bitcoin.routes.ts | 173 +- backend/src/api/bitcoin/esplora-api.ts | 8 +- backend/src/api/blocks.ts | 63 +- backend/src/api/common.ts | 85 +- backend/src/api/cpfp.ts | 4 +- backend/src/api/database-migration.ts | 140 +- backend/src/api/disk-cache.ts | 1 + backend/src/api/explorer/channels.routes.ts | 19 +- backend/src/api/explorer/general.routes.ts | 8 +- backend/src/api/explorer/nodes.routes.ts | 39 +- backend/src/api/liquid/liquid.routes.ts | 35 +- backend/src/api/mempool-blocks.ts | 97 +- backend/src/api/mempool.ts | 89 +- backend/src/api/mini-miner.ts | 2 +- backend/src/api/mining/mining-routes.ts | 83 +- backend/src/api/mining/mining.ts | 4 + backend/src/api/prices/prices.routes.ts | 24 +- backend/src/api/rbf-cache.ts | 148 +- backend/src/api/redis-cache.ts | 1 + backend/src/api/services/acceleration.ts | 184 +- backend/src/api/services/wallets.ts | 64 +- backend/src/api/transaction-utils.ts | 84 +- backend/src/api/websocket-handler.ts | 91 +- backend/src/config.ts | 8 +- backend/src/index.ts | 10 +- backend/src/indexer.ts | 2 + backend/src/mempool.interfaces.ts | 11 +- backend/src/replication/AuditReplication.ts | 6 +- .../repositories/AccelerationRepository.ts | 1 + .../repositories/BlocksAuditsRepository.ts | 148 +- backend/src/repositories/BlocksRepository.ts | 33 +- backend/src/rpc-api/commands.ts | 1 + backend/src/tasks/pools-updater.ts | 47 +- backend/src/utils/api.ts | 9 + backend/src/utils/bitcoin-script.ts | 28 +- backend/src/utils/file-read.ts | 58 + docker/README.md | 2 + docker/backend/mempool-config.json | 4 +- docker/backend/start.sh | 8 +- docker/frontend/entrypoint.sh | 2 +- frontend/README.md | 4 +- frontend/angular.json | 4 + frontend/custom-meta-config.json | 51 + frontend/cypress/e2e/mainnet/mainnet.spec.ts | 11 +- .../cypress/fixtures/mainnet_mempoolInfo.json | 2 +- frontend/package-lock.json | 1750 +++++++---------- frontend/package.json | 10 +- frontend/src/app/app-routing.module.ts | 103 +- frontend/src/app/app.constants.ts | 2 +- frontend/src/app/app.module.server.ts | 10 +- frontend/src/app/app.module.ts | 52 +- frontend/src/app/bitcoin-graphs.module.ts | 4 +- frontend/src/app/bitcoin.utils.ts | 10 +- .../about/about-sponsors.component.ts | 2 +- .../app/components/about/about.component.html | 41 +- .../app/components/about/about.component.scss | 23 +- .../app/components/about/about.component.ts | 16 +- .../src/app/components/about/about.module.ts | 6 +- .../accelerate-checkout.component.html | 30 +- .../accelerate-checkout.component.scss | 4 - .../accelerate-checkout.component.ts | 351 +++- .../accelerate-fee-graph.component.html | 2 +- .../accelerate-fee-graph.component.ts | 4 +- ...celeration-timeline-tooltip.component.html | 63 + ...celeration-timeline-tooltip.component.scss | 41 + ...acceleration-timeline-tooltip.component.ts | 38 + .../acceleration-timeline.component.html | 61 +- .../acceleration-timeline.component.scss | 12 +- .../acceleration-timeline.component.ts | 97 +- .../acceleration-fees-graph.component.ts | 22 +- .../acceleration-stats.component.ts | 2 +- .../accelerations-list.component.html | 74 +- .../accelerations-list.component.scss | 4 +- .../accelerations-list.component.ts | 37 +- .../accelerator-dashboard.component.ts | 26 +- .../active-acceleration-box.component.html | 12 +- .../active-acceleration-box.component.scss | 4 + .../active-acceleration-box.component.ts | 37 +- .../pending-stats/pending-stats.component.ts | 6 +- .../acceleration-sparkles.component.html | 5 + .../acceleration-sparkles.component.scss | 45 + .../acceleration-sparkles.component.ts | 73 + .../address-graph/address-graph.component.ts | 63 +- .../address-group/address-group.component.ts | 16 +- .../address-labels.component.ts | 8 +- .../address-transactions-widget.component.ts | 8 +- .../address/address-preview.component.ts | 18 +- .../components/address/address.component.html | 16 +- .../components/address/address.component.ts | 124 +- .../addresses-treemap.component.html | 10 + .../addresses-treemap.component.scss | 17 + .../addresses-treemap.component.ts | 150 ++ .../amount-selector.component.html | 7 + .../amount-selector.component.scss | 0 .../amount-selector.component.ts | 36 + .../components/amount/amount.component.html | 2 +- .../app/components/amount/amount.component.ts | 4 +- .../src/app/components/app/app.component.ts | 8 +- .../asset-circulation.component.ts | 8 +- .../app/components/asset/asset.component.ts | 20 +- .../asset-group/asset-group.component.ts | 4 +- .../assets-featured.component.ts | 4 +- .../assets/assets-nav/assets-nav.component.ts | 12 +- .../app/components/assets/assets.component.ts | 10 +- .../balance-widget.component.ts | 6 +- .../bitcoin-invoice.component.ts | 2 +- .../block-fee-rates-graph.component.ts | 20 +- .../block-fees-graph.component.ts | 20 +- .../block-fees-subsidy-graph.component.ts | 22 +- .../block-filters.component.html | 3 +- .../block-filters.component.scss | 1 - .../block-filters/block-filters.component.ts | 6 +- .../block-health-graph.component.ts | 16 +- .../block-overview-graph.component.html | 10 +- .../block-overview-graph.component.ts | 30 +- .../block-overview-graph/block-scene.ts | 25 +- .../block-overview-graph/fast-vertex-array.ts | 2 +- .../block-overview-graph/tx-sprite.ts | 4 +- .../block-overview-graph/tx-view.ts | 16 +- .../components/block-overview-graph/utils.ts | 27 +- .../block-overview-tooltip.component.html | 13 +- .../block-overview-tooltip.component.scss | 3 + .../block-overview-tooltip.component.ts | 10 +- .../block-rewards-graph.component.ts | 20 +- .../block-sizes-weights-graph.component.ts | 16 +- .../block-view/block-view.component.ts | 16 +- .../block/block-preview.component.html | 18 +- .../block/block-preview.component.ts | 20 +- .../block/block-transactions.component.ts | 8 +- .../app/components/block/block.component.html | 11 +- .../app/components/block/block.component.scss | 13 + .../app/components/block/block.component.ts | 81 +- .../src/app/components/block/block.module.ts | 6 +- .../blockchain-blocks.component.html | 11 +- .../blockchain-blocks.component.scss | 45 +- .../blockchain-blocks.component.ts | 8 +- .../blockchain/blockchain.component.ts | 4 +- .../blocks-list/blocks-list.component.html | 7 +- .../blocks-list/blocks-list.component.scss | 4 +- .../blocks-list/blocks-list.component.ts | 18 +- .../calculator/calculator.component.html | 6 +- .../calculator/calculator.component.ts | 4 +- .../clipboard/clipboard.component.html | 10 +- .../clipboard/clipboard.component.scss | 20 +- .../clipboard/clipboard.component.ts | 53 +- .../clock-face/clock-face.component.ts | 2 +- .../app/components/clock/clock.component.ts | 10 +- .../clockchain/clockchain.component.ts | 2 +- .../custom-dashboard.component.html | 10 +- .../custom-dashboard.component.ts | 74 +- ...difficulty-adjustments-table.components.ts | 8 +- .../difficulty-mining.component.ts | 4 +- .../difficulty/difficulty.component.ts | 8 +- .../eight-blocks/eight-blocks.component.ts | 16 +- .../components/faucet/faucet.component.html | 19 +- .../app/components/faucet/faucet.component.ts | 46 +- .../fee-distribution-graph.component.ts | 8 +- .../components/fees-box/fees-box.component.ts | 8 +- .../fiat-selector/fiat-selector.component.ts | 6 +- .../app/components/footer/footer.component.ts | 4 +- .../app/components/graphs/graphs.component.ts | 12 +- .../hashrate-chart.component.html | 2 +- .../hashrate-chart.component.ts | 20 +- .../hashrate-chart-pools.component.scss | 2 +- .../hashrate-chart-pools.component.ts | 18 +- .../incoming-transactions-graph.component.ts | 10 +- .../language-selector.component.ts | 4 +- .../lbtc-pegs-graph.component.ts | 6 +- .../liquid-master-page.component.html | 2 +- .../liquid-master-page.component.ts | 8 +- .../expired-utxos-stats.component.ts | 2 +- .../federation-addresses-list.component.ts | 8 +- .../federation-utxos-list.component.ts | 8 +- .../federation-wallet.component.ts | 2 +- .../recent-pegs-list.component.ts | 10 +- .../recent-pegs-stats.component.ts | 2 +- .../reserves-ratio.component.scss | 2 +- .../reserves-ratio.component.ts | 4 +- .../reserves-supply-stats.component.ts | 4 +- .../loading-indicator.component.scss | 2 +- .../loading-indicator.component.ts | 4 +- .../master-page-preview.component.ts | 6 +- .../preview-title.component.ts | 2 +- .../master-page/master-page.component.html | 3 +- .../master-page/master-page.component.ts | 12 +- .../mempool-block-overview.component.ts | 41 +- .../mempool-block-view.component.ts | 4 +- .../mempool-block/mempool-block.component.ts | 16 +- .../mempool-blocks.component.html | 3 +- .../mempool-blocks.component.ts | 32 +- .../mempool-graph/mempool-graph.component.ts | 20 +- .../app/components/menu/menu.component.html | 12 +- .../src/app/components/menu/menu.component.ts | 10 +- .../mining-dashboard.component.ts | 8 +- .../ngx-bootstrap-multiselect.component.ts | 4 +- .../search-filter.pipe.ts | 2 +- .../ord-data/ord-data.component.html | 65 + .../ord-data/ord-data.component.scss | 35 + .../components/ord-data/ord-data.component.ts | 87 + .../pool-ranking/pool-ranking.component.html | 16 +- .../pool-ranking/pool-ranking.component.scss | 2 +- .../pool-ranking/pool-ranking.component.ts | 36 +- .../components/pool/pool-preview.component.ts | 12 +- .../app/components/pool/pool.component.scss | 2 +- .../src/app/components/pool/pool.component.ts | 12 +- .../privacy-policy.component.html | 40 +- .../privacy-policy.component.ts | 6 +- .../privacy-policy/privacy-policy.module.ts | 4 +- .../push-transaction.component.html | 62 + .../push-transaction.component.ts | 94 +- .../app/components/qrcode/qrcode.component.ts | 2 +- .../rate-unit-selector.component.ts | 4 +- .../components/rbf-list/rbf-list.component.ts | 14 +- .../rbf-timeline-tooltip.component.html | 2 +- .../rbf-timeline-tooltip.component.ts | 2 +- .../rbf-timeline/rbf-timeline.component.ts | 6 +- .../reward-stats/reward-stats.component.ts | 4 +- .../search-form/search-form.component.ts | 14 +- .../search-results.component.ts | 2 +- .../server-health.component.html | 4 +- .../server-health/server-health.component.ts | 17 +- .../server-health/server-status.component.ts | 6 +- .../app/components/start/start.component.ts | 12 +- .../statistics/statistics.component.ts | 18 +- .../status-view/status-view.component.ts | 2 +- .../svg-images/svg-images.component.html | 64 +- .../television/television.component.ts | 10 +- .../terms-of-service.component.ts | 6 +- .../terms-of-service.module.ts | 4 +- .../test-transactions.component.html | 5 +- .../test-transactions.component.ts | 12 +- .../theme-selector.component.ts | 2 +- .../src/app/components/time/time.component.ts | 273 +-- .../components/tracker/tracker.component.html | 60 +- .../components/tracker/tracker.component.scss | 2 +- .../components/tracker/tracker.component.ts | 47 +- .../app/components/tracker/tracker.module.ts | 12 +- .../trademark-policy.component.html | 19 +- .../trademark-policy.component.ts | 6 +- .../trademark-policy.module.ts | 4 +- .../transaction/liquid-ublinding.ts | 6 +- .../transaction-details.component.html | 324 +++ .../transaction-details.component.scss | 183 ++ .../transaction-details.component.ts | 56 + .../transaction/transaction-extras.module.ts | 11 + .../transaction-preview.component.html | 2 +- .../transaction-preview.component.ts | 20 +- .../transaction/transaction.component.html | 352 +--- .../transaction/transaction.component.scss | 41 +- .../transaction/transaction.component.ts | 228 ++- .../transaction/transaction.module.ts | 17 +- .../transactions-list.component.html | 36 +- .../transactions-list.component.scss | 13 +- .../transactions-list.component.ts | 169 +- .../twitter-widget.component.ts | 4 +- .../tx-bowtie-graph-tooltip.component.html | 6 +- .../tx-bowtie-graph-tooltip.component.ts | 8 +- .../tx-bowtie-graph.component.ts | 14 +- .../tx-bowtie-graph/tx-bowtie.module.ts | 6 +- .../tx-features/tx-features.component.ts | 6 +- .../tx-fee-rating/tx-fee-rating.component.ts | 8 +- .../utxo-graph/utxo-graph.component.html | 21 + .../utxo-graph/utxo-graph.component.scss | 59 + .../utxo-graph/utxo-graph.component.ts | 374 ++++ .../components/wallet/wallet.component.html | 129 ++ .../components/wallet/wallet.component.scss | 117 ++ .../app/components/wallet/wallet.component.ts | 303 +++ .../src/app/dashboard/dashboard.component.ts | 18 +- frontend/src/app/data-cy.directive.ts | 2 +- .../src/app/docs/api-docs/api-docs-data.ts | 63 +- .../docs/api-docs/api-docs-nav.component.ts | 6 +- .../app/docs/api-docs/api-docs.component.ts | 6 +- .../code-template/code-template.component.ts | 2 +- frontend/src/app/docs/docs.module.ts | 14 +- frontend/src/app/docs/docs.routing.module.ts | 2 +- frontend/src/app/docs/docs/docs.component.ts | 8 +- frontend/src/app/fiat/fiat.component.ts | 4 +- frontend/src/app/graphs/echarts.ts | 5 +- frontend/src/app/graphs/graphs.module.ts | 80 +- .../src/app/graphs/graphs.routing.module.ts | 56 +- .../src/app/graphs/lightning-graphs.module.ts | 14 +- .../src/app/interfaces/electrs.interface.ts | 17 +- .../src/app/interfaces/node-api.interface.ts | 36 +- .../src/app/interfaces/websocket.interface.ts | 12 +- .../channel-box/channel-box.component.spec.ts | 2 +- .../channel-close-box.component.spec.ts | 2 +- .../channel/channel-preview.component.ts | 6 +- .../lightning/channel/channel.component.scss | 2 +- .../lightning/channel/channel.component.ts | 8 +- .../channels-list/channels-list.component.ts | 4 +- .../channels-statistics.component.ts | 2 +- .../group/group-preview.component.ts | 8 +- .../app/lightning/group/group.component.ts | 6 +- .../justice-list/justice-list.component.ts | 8 +- .../app/lightning/lightning-api.service.ts | 4 +- .../lightning-dashboard.component.ts | 10 +- .../lightning/lightning-previews.module.ts | 18 +- .../lightning-previews.routing.module.ts | 8 +- .../lightning-wrapper.component.ts | 8 +- .../src/app/lightning/lightning.module.ts | 66 +- .../app/lightning/lightning.routing.module.ts | 20 +- .../node-fee-chart.component.ts | 12 +- .../node-statistics-chart.component.ts | 12 +- .../node-statistics.component.ts | 2 +- .../lightning/node/node-preview.component.ts | 10 +- .../src/app/lightning/node/node.component.ts | 14 +- .../nodes-channels-map.component.scss | 8 +- .../nodes-channels-map.component.ts | 20 +- .../node-channels.component.scss | 2 +- .../nodes-channels/node-channels.component.ts | 14 +- .../nodes-map/nodes-map.component.scss | 2 +- .../nodes-map/nodes-map.component.ts | 18 +- .../nodes-networks-chart.component.ts | 20 +- .../nodes-per-country-chart.component.ts | 18 +- .../nodes-per-country.component.ts | 8 +- .../nodes-per-isp-chart.component.scss | 2 +- .../nodes-per-isp-chart.component.ts | 18 +- .../nodes-per-isp-preview.component.ts | 10 +- .../nodes-per-isp/nodes-per-isp.component.ts | 8 +- .../nodes-ranking/nodes-ranking.component.ts | 4 +- .../oldest-nodes/oldest-nodes.component.ts | 8 +- .../top-nodes-per-capacity.component.ts | 10 +- .../top-nodes-per-channels.component.ts | 10 +- .../nodes-rankings-dashboard.component.ts | 6 +- .../lightning-statistics-chart.component.ts | 20 +- .../src/app/liquid/liquid-graphs.module.ts | 2 +- .../app/liquid/liquid-master-page.module.ts | 46 +- frontend/src/app/master-page.module.ts | 40 +- frontend/src/app/previews.module.ts | 16 +- frontend/src/app/previews.routing.module.ts | 12 +- frontend/src/app/route-guards.ts | 23 + frontend/src/app/services/api.service.ts | 41 +- frontend/src/app/services/assets.service.ts | 6 +- frontend/src/app/services/auth.service.ts | 2 +- frontend/src/app/services/cache.service.ts | 10 +- .../src/app/services/electrs-api.service.ts | 58 +- .../src/app/services/enterprise.service.ts | 7 +- frontend/src/app/services/eta.service.ts | 24 +- frontend/src/app/services/language.service.ts | 2 +- frontend/src/app/services/mining.service.ts | 40 +- .../src/app/services/navigation.service.ts | 13 +- .../src/app/services/opengraph.service.ts | 4 +- frontend/src/app/services/ord-api.service.ts | 100 + frontend/src/app/services/preload.service.ts | 2 +- frontend/src/app/services/price.service.ts | 6 +- frontend/src/app/services/seo.service.ts | 2 +- .../src/app/services/services-api.service.ts | 59 +- frontend/src/app/services/state.service.ts | 74 +- frontend/src/app/services/theme.service.ts | 6 +- frontend/src/app/services/time.service.ts | 266 +++ .../src/app/services/websocket.service.ts | 40 +- frontend/src/app/shared/address-utils.ts | 19 +- frontend/src/app/shared/common.utils.ts | 65 +- .../address-type/address-type.component.html | 3 + .../address-type/address-type.component.ts | 2 +- .../shared/components/btc/btc.component.ts | 2 +- .../components/fee-rate/fee-rate.component.ts | 2 +- .../geolocation/geolocation.component.ts | 8 +- .../global-footer.component.html | 36 +- .../global-footer.component.scss | 34 +- .../global-footer/global-footer.component.ts | 14 +- .../shared/components/sats/sats.component.ts | 2 +- .../testnet-alert.component.html | 3 - .../testnet-alert/testnet-alert.component.ts | 4 +- .../truncate/truncate.component.html | 2 +- .../components/truncate/truncate.component.ts | 1 + .../weight-directives/weight-directives.ts | 4 +- .../src/app/shared/ord/inscription.utils.ts | 425 ++++ frontend/src/app/shared/ord/rune.utils.ts | 255 +++ .../app/shared/pipes/bitcoinsatoshis.pipe.ts | 4 +- .../app/shared/pipes/bytes-pipe/bytes.pipe.ts | 2 +- .../shared/pipes/bytes-pipe/vbytes.pipe.ts | 2 +- .../shared/pipes/bytes-pipe/wubytes.pipe.ts | 2 +- .../app/shared/pipes/fiat-currency.pipe.ts | 4 +- .../app/shared/pipes/fiat-shortener.pipe.ts | 4 +- .../pipes/relative-url/relative-url.pipe.ts | 2 +- frontend/src/app/shared/regex.utils.ts | 16 +- frontend/src/app/shared/script.utils.ts | 5 +- frontend/src/app/shared/shared.module.ts | 226 ++- frontend/src/app/shared/transaction.utils.ts | 149 +- frontend/src/index.mempool.meta.html | 45 + frontend/src/locale/messages.ar.xlf | 937 ++++++--- frontend/src/locale/messages.ca.xlf | 573 +++--- frontend/src/locale/messages.cs.xlf | 675 ++++--- frontend/src/locale/messages.da.xlf | 937 ++++++--- frontend/src/locale/messages.de.xlf | 603 +++--- frontend/src/locale/messages.es.xlf | 805 +++++--- frontend/src/locale/messages.fa.xlf | 767 +++++--- frontend/src/locale/messages.fi.xlf | 838 +++++--- frontend/src/locale/messages.fr.xlf | 626 +++--- frontend/src/locale/messages.he.xlf | 760 ++++--- frontend/src/locale/messages.hi.xlf | 1178 ++++++++--- frontend/src/locale/messages.hr.xlf | 1371 ++++++++++--- frontend/src/locale/messages.hu.xlf | 575 +++--- frontend/src/locale/messages.it.xlf | 677 ++++--- frontend/src/locale/messages.ja.xlf | 608 +++--- frontend/src/locale/messages.ka.xlf | 575 +++--- frontend/src/locale/messages.ko.xlf | 628 +++--- frontend/src/locale/messages.lt.xlf | 575 +++--- frontend/src/locale/messages.mk.xlf | 575 +++--- frontend/src/locale/messages.nb.xlf | 838 +++++--- frontend/src/locale/messages.ne.xlf | 575 +++--- frontend/src/locale/messages.nl.xlf | 705 ++++--- frontend/src/locale/messages.pl.xlf | 708 ++++--- frontend/src/locale/messages.pt.xlf | 804 +++++--- frontend/src/locale/messages.ro.xlf | 700 ++++--- frontend/src/locale/messages.ru.xlf | 694 ++++--- frontend/src/locale/messages.sl.xlf | 575 +++--- frontend/src/locale/messages.sv.xlf | 635 +++--- frontend/src/locale/messages.th.xlf | 688 ++++--- frontend/src/locale/messages.tr.xlf | 770 +++++--- frontend/src/locale/messages.uk.xlf | 594 +++--- frontend/src/locale/messages.vi.xlf | 837 +++++--- frontend/src/locale/messages.xlf | 617 +++--- frontend/src/locale/messages.zh.xlf | 648 +++--- frontend/src/resources/apple-pay.png | Bin 0 -> 47582 bytes frontend/src/resources/apple-pay.svg | 84 - frontend/src/resources/google-pay.png | Bin 0 -> 30980 bytes .../resources/mempool-block-visualization.png | Bin 0 -> 15888 bytes frontend/src/resources/mempool-research.png | Bin 0 -> 52995 bytes .../src/resources/mempool-transaction.png | Bin 0 -> 61277 bytes .../meta/favicons/android-chrome-192x192.png | Bin 0 -> 20678 bytes .../meta/favicons/android-chrome-512x512.png | Bin 0 -> 94136 bytes .../meta/favicons/apple-touch-icon.png | Bin 0 -> 18611 bytes .../resources/meta/favicons/favicon-16x16.png | Bin 0 -> 698 bytes .../resources/meta/favicons/favicon-32x32.png | Bin 0 -> 1606 bytes .../src/resources/meta/favicons/favicon.ico | Bin 0 -> 15406 bytes .../resources/meta/favicons/site.webmanifest | 1 + frontend/src/resources/meta/meta-preview.png | Bin 0 -> 2493740 bytes frontend/src/resources/metalogo.svg | 1 + frontend/src/resources/profile/bitkey.svg | 3 + frontend/src/resources/profile/leather.svg | 3 + frontend/src/resources/profile/wizardhat.png | Bin 0 -> 131292 bytes frontend/src/styles.scss | 90 +- frontend/tsconfig.app.json | 8 +- nginx.conf | 2 + production/README.md | 6 +- production/bitcoin.conf | 2 +- production/bitcoin.crontab | 1 + production/install | 141 +- production/linux/bitcoin-testnet4.service | 22 + production/mempool-build-all | 6 +- production/mempool-config.mainnet.json | 4 + .../mempool-frontend-config.mainnet.json | 4 + production/mempool-frontend-config.meta.json | 19 + production/mempool-reset-all | 6 +- production/mempool-start-all | 2 +- production/mempool-update-repo | 1 + production/nginx/http-language.conf | 2 + .../nginx/location-api-v1-services.conf | 9 +- production/nginx/location-api.conf | 24 +- production/nginx/location-testnet-api.conf | 21 +- production/nginx/nginx.conf | 6 + production/nginx/server-common.conf | 7 +- production/unfurler-config.meta.json | 17 + unfurler/package-lock.json | 4 +- unfurler/package.json | 2 +- unfurler/src/routes.ts | 20 + 472 files changed, 25806 insertions(+), 13790 deletions(-) create mode 100644 backend/src/utils/api.ts create mode 100644 backend/src/utils/file-read.ts create mode 100644 frontend/custom-meta-config.json create mode 100644 frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html create mode 100644 frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.scss create mode 100644 frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.ts create mode 100644 frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.html create mode 100644 frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.scss create mode 100644 frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.ts create mode 100644 frontend/src/app/components/addresses-treemap/addresses-treemap.component.html create mode 100644 frontend/src/app/components/addresses-treemap/addresses-treemap.component.scss create mode 100644 frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts create mode 100644 frontend/src/app/components/amount-selector/amount-selector.component.html create mode 100644 frontend/src/app/components/amount-selector/amount-selector.component.scss create mode 100644 frontend/src/app/components/amount-selector/amount-selector.component.ts create mode 100644 frontend/src/app/components/ord-data/ord-data.component.html create mode 100644 frontend/src/app/components/ord-data/ord-data.component.scss create mode 100644 frontend/src/app/components/ord-data/ord-data.component.ts create mode 100644 frontend/src/app/components/transaction/transaction-details/transaction-details.component.html create mode 100644 frontend/src/app/components/transaction/transaction-details/transaction-details.component.scss create mode 100644 frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts create mode 100644 frontend/src/app/components/transaction/transaction-extras.module.ts create mode 100644 frontend/src/app/components/utxo-graph/utxo-graph.component.html create mode 100644 frontend/src/app/components/utxo-graph/utxo-graph.component.scss create mode 100644 frontend/src/app/components/utxo-graph/utxo-graph.component.ts create mode 100644 frontend/src/app/components/wallet/wallet.component.html create mode 100644 frontend/src/app/components/wallet/wallet.component.scss create mode 100644 frontend/src/app/components/wallet/wallet.component.ts create mode 100644 frontend/src/app/route-guards.ts create mode 100644 frontend/src/app/services/ord-api.service.ts create mode 100644 frontend/src/app/services/time.service.ts create mode 100644 frontend/src/app/shared/ord/inscription.utils.ts create mode 100644 frontend/src/app/shared/ord/rune.utils.ts create mode 100644 frontend/src/index.mempool.meta.html create mode 100644 frontend/src/resources/apple-pay.png delete mode 100755 frontend/src/resources/apple-pay.svg create mode 100644 frontend/src/resources/google-pay.png create mode 100644 frontend/src/resources/mempool-block-visualization.png create mode 100644 frontend/src/resources/mempool-research.png create mode 100644 frontend/src/resources/mempool-transaction.png create mode 100644 frontend/src/resources/meta/favicons/android-chrome-192x192.png create mode 100644 frontend/src/resources/meta/favicons/android-chrome-512x512.png create mode 100644 frontend/src/resources/meta/favicons/apple-touch-icon.png create mode 100644 frontend/src/resources/meta/favicons/favicon-16x16.png create mode 100644 frontend/src/resources/meta/favicons/favicon-32x32.png create mode 100644 frontend/src/resources/meta/favicons/favicon.ico create mode 100644 frontend/src/resources/meta/favicons/site.webmanifest create mode 100644 frontend/src/resources/meta/meta-preview.png create mode 100644 frontend/src/resources/metalogo.svg create mode 100644 frontend/src/resources/profile/bitkey.svg create mode 100644 frontend/src/resources/profile/leather.svg create mode 100644 frontend/src/resources/profile/wizardhat.png create mode 100644 production/linux/bitcoin-testnet4.service create mode 100644 production/mempool-frontend-config.meta.json create mode 100755 production/mempool-update-repo create mode 100644 production/unfurler-config.meta.json diff --git a/LICENSE b/LICENSE index b6a09390a..1c368c00a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,5 @@ The Mempool Open Source Project® -Copyright (c) 2019-2023 Mempool Space K.K. and other shadowy super-coders +Copyright (c) 2019-2024 Mempool Space K.K. and other shadowy super-coders This program is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free @@ -12,10 +12,12 @@ or any other contributor to The Mempool Open Source Project. The Mempool Open Source Project®, Mempool Accelerator™, Mempool Enterprise®, Mempool Liquidity™, mempool.space®, Be your own explorer™, Explore the full -Bitcoin ecosystem™, Mempool Goggles™, the mempool Logo, the mempool Square logo, -the mempool Blocks logo, the mempool Blocks 3 | 2 logo, the mempool.space Vertical -Logo, and the mempool.space Horizontal logo are registered trademarks or trademarks -of Mempool Space K.K in Japan, the United States, and/or other countries. +Bitcoin ecosystem™, Mempool Goggles™, the mempool Logo, the mempool Square Logo, +the mempool block visualization Logo, the mempool Blocks Logo, the mempool +transaction Logo, the mempool Blocks 3 | 2 Logo, the mempool research Logo, +the mempool.space Vertical Logo, and the mempool.space Horizontal Logo are +registered trademarks or trademarks of Mempool Space K.K in Japan, +the United States, and/or other countries. See our full Trademark Policy and Guidelines for more details, published on . diff --git a/backend/README.md b/backend/README.md index 6ae4ae3e2..cecc07bc9 100644 --- a/backend/README.md +++ b/backend/README.md @@ -77,7 +77,7 @@ Query OK, 0 rows affected (0.00 sec) #### Build -_Make sure to use Node.js 16.10 and npm 7._ +_Make sure to use Node.js 20.x and npm 9.x or newer_ _The build process requires [Rust](https://www.rust-lang.org/tools/install) to be installed._ diff --git a/backend/mempool-config.sample.json b/backend/mempool-config.sample.json index 4650c1e64..7ad25dff0 100644 --- a/backend/mempool-config.sample.json +++ b/backend/mempool-config.sample.json @@ -27,8 +27,9 @@ "AUTOMATIC_POOLS_UPDATE": false, "POOLS_JSON_URL": "https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json", "POOLS_JSON_TREE_URL": "https://api.github.com/repos/mempool/mining-pools/git/trees/master", + "POOLS_UPDATE_DELAY": 604800, "AUDIT": false, - "RUST_GBT": false, + "RUST_GBT": true, "LIMIT_GBT": false, "CPFP_INDEXING": false, "DISK_CACHE_BLOCK_INTERVAL": 6, @@ -45,7 +46,8 @@ "PASSWORD": "mempool", "TIMEOUT": 60000, "COOKIE": false, - "COOKIE_PATH": "/path/to/bitcoin/.cookie" + "COOKIE_PATH": "/path/to/bitcoin/.cookie", + "DEBUG_LOG_PATH": "/path/to/bitcoin/debug.log" }, "ELECTRUM": { "HOST": "127.0.0.1", diff --git a/backend/package-lock.json b/backend/package-lock.json index 04e15afa2..e0d28bfc9 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -1,25 +1,25 @@ { "name": "mempool-backend", - "version": "3.0.0-dev", + "version": "3.1.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mempool-backend", - "version": "3.0.0-dev", + "version": "3.1.0-dev", "hasInstallScript": true, "license": "GNU Affero General Public License v3.0", "dependencies": { - "@babel/core": "^7.24.0", + "@babel/core": "^7.25.2", "@mempool/electrum-client": "1.1.9", "@types/node": "^18.15.3", - "axios": "~1.7.2", + "axios": "1.7.2", "bitcoinjs-lib": "~6.1.3", "crypto-js": "~4.2.0", - "express": "~4.19.2", + "express": "~4.21.1", "maxmind": "~4.3.11", - "mysql2": "~3.10.0", - "redis": "^4.6.6", + "mysql2": "~3.11.0", + "redis": "^4.7.0", "rust-gbt": "file:./rust-gbt", "socks-proxy-agent": "~7.0.0", "typescript": "~4.9.3", @@ -27,7 +27,7 @@ }, "devDependencies": { "@babel/code-frame": "^7.18.6", - "@babel/core": "^7.24.0", + "@babel/core": "^7.25.2", "@types/compression": "^1.7.2", "@types/crypto-js": "^4.1.1", "@types/express": "^4.17.17", @@ -73,43 +73,43 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", - "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.0", - "@babel/parser": "^7.24.0", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -131,14 +131,14 @@ "dev": true }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "dev": true, "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -146,28 +146,28 @@ } }, "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -175,63 +175,29 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -250,88 +216,77 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", - "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", "dev": true, "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", - "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", + "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -518,33 +473,30 @@ } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", - "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz", + "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -553,13 +505,13 @@ } }, "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1475,9 +1427,9 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" @@ -1490,13 +1442,13 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@mempool/electrum-client": { @@ -1562,9 +1514,9 @@ } }, "node_modules/@redis/client": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.5.7.tgz", - "integrity": "sha512-gaOBOuJPjK5fGtxSseaKgSvjiZXQCdLlGg9WYQst+/GRUjmXaiB5kVkeQMRtPc7Q2t93XZcJfBMSwzs/XS9UZw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.6.0.tgz", + "integrity": "sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg==", "dependencies": { "cluster-key-slot": "1.1.2", "generic-pool": "3.9.0", @@ -1580,33 +1532,33 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/@redis/graph": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.0.tgz", - "integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.1.tgz", + "integrity": "sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==", "peerDependencies": { "@redis/client": "^1.0.0" } }, "node_modules/@redis/json": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.4.tgz", - "integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.7.tgz", + "integrity": "sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==", "peerDependencies": { "@redis/client": "^1.0.0" } }, "node_modules/@redis/search": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.2.tgz", - "integrity": "sha512-/cMfstG/fOh/SsE+4/BQGeuH/JJloeWuH+qJzM8dbxuWvdWibWAOAHHCZTMPhV3xIlH4/cUEIA8OV5QnYpaVoA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.2.0.tgz", + "integrity": "sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==", "peerDependencies": { "@redis/client": "^1.0.0" } }, "node_modules/@redis/time-series": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.4.tgz", - "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.1.0.tgz", + "integrity": "sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==", "peerDependencies": { "@redis/client": "^1.0.0" } @@ -2317,10 +2269,19 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.1.tgz", + "integrity": "sha512-+H+kuK34PfMaI9PNU/NSjBKL5hh/KDM9J72kwYeYEm0A8B1AC4fuCy3qsjnA7lxklgyXsB68yn8Z2xoZEjgwCQ==", + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/axios": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -2529,9 +2490,9 @@ } }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -2541,7 +2502,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -2587,9 +2548,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", "dev": true, "funding": [ { @@ -2606,10 +2567,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -2707,9 +2668,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001591", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz", - "integrity": "sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==", + "version": "1.0.30001644", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz", + "integrity": "sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==", "dev": true, "funding": [ { @@ -2866,9 +2827,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "engines": { "node": ">= 0.6" } @@ -3046,9 +3007,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.686", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.686.tgz", - "integrity": "sha512-3avY1B+vUzNxEgkBDpKOP8WarvUAEwpRaiCL0He5OKWEFxzaOFiq4WoZEZe7qh0ReS7DiWoHMnYoQCKxNZNzSg==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", "dev": true }, "node_modules/emittery": { @@ -3070,9 +3031,9 @@ "dev": true }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { "node": ">= 0.8" } @@ -3106,9 +3067,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -3500,36 +3461,36 @@ } }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -3642,12 +3603,12 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -6091,9 +6052,12 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -6197,10 +6161,11 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/mysql2": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.10.0.tgz", - "integrity": "sha512-qx0mfWYt1DpTPkw8mAcHW/OwqqyNqBLBHvY5IjN8+icIYTjt6znrgYJ+gxqNNRpVknb5Wc/gcCM4XjbCR0j5tw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.0.tgz", + "integrity": "sha512-J9phbsXGvTOcRVPR95YedzVSxJecpW5A5+cQ57rhHIFXteTP10HCs+VBjS7DHIKfEaI1zQ5tlVrquCd64A6YvA==", "dependencies": { + "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", "generate-function": "^2.3.1", "iconv-lite": "^0.6.3", @@ -6279,9 +6244,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, "node_modules/normalize-path": { @@ -6306,9 +6271,12 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6476,9 +6444,9 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, "node_modules/path-type": { "version": "4.0.0", @@ -6490,9 +6458,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -6686,11 +6654,11 @@ ] }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -6748,16 +6716,16 @@ "dev": true }, "node_modules/redis": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/redis/-/redis-4.6.6.tgz", - "integrity": "sha512-aLs2fuBFV/VJ28oLBqYykfnhGGkFxvx0HdCEBYdJ99FFbSEMZ7c1nVKwR6ZRv+7bb7JnC0mmCzaqu8frgOYhpA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/redis/-/redis-4.7.0.tgz", + "integrity": "sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ==", "dependencies": { "@redis/bloom": "1.2.0", - "@redis/client": "1.5.7", - "@redis/graph": "1.1.0", - "@redis/json": "1.0.4", - "@redis/search": "1.1.2", - "@redis/time-series": "1.0.4" + "@redis/client": "1.6.0", + "@redis/graph": "1.1.1", + "@redis/json": "1.0.7", + "@redis/search": "1.2.0", + "@redis/time-series": "1.1.0" } }, "node_modules/require-directory": { @@ -6911,9 +6879,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -6946,6 +6914,14 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -6957,14 +6933,14 @@ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" @@ -7514,9 +7490,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -7533,8 +7509,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -7794,37 +7770,37 @@ } }, "@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, "requires": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" } }, "@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", "dev": true }, "@babel/core": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", - "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.0", - "@babel/parser": "^7.24.0", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -7841,88 +7817,63 @@ } }, "@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "dev": true, "requires": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "dependencies": { "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" } } } }, "@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dev": true, "requires": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, "@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, "requires": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" } }, "@babel/helper-plugin-utils": { @@ -7932,67 +7883,59 @@ "dev": true }, "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true }, "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true }, "@babel/helpers": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", - "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", "dev": true, "requires": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" } }, "@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" } }, "@babel/parser": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", - "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", + "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -8122,42 +8065,39 @@ } }, "@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dev": true, "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" } }, "@babel/traverse": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", - "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz", + "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" } }, @@ -8847,9 +8787,9 @@ "dev": true }, "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true }, "@jridgewell/sourcemap-codec": { @@ -8859,13 +8799,13 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@mempool/electrum-client": { @@ -8911,9 +8851,9 @@ "requires": {} }, "@redis/client": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.5.7.tgz", - "integrity": "sha512-gaOBOuJPjK5fGtxSseaKgSvjiZXQCdLlGg9WYQst+/GRUjmXaiB5kVkeQMRtPc7Q2t93XZcJfBMSwzs/XS9UZw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.6.0.tgz", + "integrity": "sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg==", "requires": { "cluster-key-slot": "1.1.2", "generic-pool": "3.9.0", @@ -8928,27 +8868,27 @@ } }, "@redis/graph": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.0.tgz", - "integrity": "sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.1.1.tgz", + "integrity": "sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==", "requires": {} }, "@redis/json": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.4.tgz", - "integrity": "sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.7.tgz", + "integrity": "sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==", "requires": {} }, "@redis/search": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.1.2.tgz", - "integrity": "sha512-/cMfstG/fOh/SsE+4/BQGeuH/JJloeWuH+qJzM8dbxuWvdWibWAOAHHCZTMPhV3xIlH4/cUEIA8OV5QnYpaVoA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.2.0.tgz", + "integrity": "sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==", "requires": {} }, "@redis/time-series": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.4.tgz", - "integrity": "sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.1.0.tgz", + "integrity": "sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==", "requires": {} }, "@sinclair/typebox": { @@ -9508,6 +9448,11 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "aws-ssl-profiles": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.1.tgz", + "integrity": "sha512-+H+kuK34PfMaI9PNU/NSjBKL5hh/KDM9J72kwYeYEm0A8B1AC4fuCy3qsjnA7lxklgyXsB68yn8Z2xoZEjgwCQ==" + }, "axios": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", @@ -9674,9 +9619,9 @@ } }, "body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "requires": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -9686,7 +9631,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -9727,15 +9672,15 @@ } }, "browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.1.0" } }, "bs-logger": { @@ -9809,9 +9754,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001591", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz", - "integrity": "sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==", + "version": "1.0.30001644", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz", + "integrity": "sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==", "dev": true }, "chalk": { @@ -9920,9 +9865,9 @@ "dev": true }, "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" }, "cookie-signature": { "version": "1.0.6", @@ -10049,9 +9994,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "version": "1.4.686", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.686.tgz", - "integrity": "sha512-3avY1B+vUzNxEgkBDpKOP8WarvUAEwpRaiCL0He5OKWEFxzaOFiq4WoZEZe7qh0ReS7DiWoHMnYoQCKxNZNzSg==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", "dev": true }, "emittery": { @@ -10067,9 +10012,9 @@ "dev": true }, "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" }, "error-ex": { "version": "1.3.2", @@ -10094,9 +10039,9 @@ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true }, "escape-html": { @@ -10374,36 +10319,36 @@ } }, "express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -10505,12 +10450,12 @@ } }, "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -12307,9 +12252,9 @@ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" }, "merge-stream": { "version": "2.0.0", @@ -12382,10 +12327,11 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mysql2": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.10.0.tgz", - "integrity": "sha512-qx0mfWYt1DpTPkw8mAcHW/OwqqyNqBLBHvY5IjN8+icIYTjt6znrgYJ+gxqNNRpVknb5Wc/gcCM4XjbCR0j5tw==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.0.tgz", + "integrity": "sha512-J9phbsXGvTOcRVPR95YedzVSxJecpW5A5+cQ57rhHIFXteTP10HCs+VBjS7DHIKfEaI1zQ5tlVrquCd64A6YvA==", "requires": { + "aws-ssl-profiles": "^1.1.1", "denque": "^2.1.0", "generate-function": "^2.3.1", "iconv-lite": "^0.6.3", @@ -12450,9 +12396,9 @@ "dev": true }, "node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, "normalize-path": { @@ -12471,9 +12417,9 @@ } }, "object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" }, "on-finished": { "version": "2.4.1", @@ -12590,9 +12536,9 @@ "dev": true }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, "path-type": { "version": "4.0.0", @@ -12601,9 +12547,9 @@ "dev": true }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "picomatch": { @@ -12734,11 +12680,11 @@ "dev": true }, "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } }, "queue-microtask": { @@ -12770,16 +12716,16 @@ "dev": true }, "redis": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/redis/-/redis-4.6.6.tgz", - "integrity": "sha512-aLs2fuBFV/VJ28oLBqYykfnhGGkFxvx0HdCEBYdJ99FFbSEMZ7c1nVKwR6ZRv+7bb7JnC0mmCzaqu8frgOYhpA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/redis/-/redis-4.7.0.tgz", + "integrity": "sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ==", "requires": { "@redis/bloom": "1.2.0", - "@redis/client": "1.5.7", - "@redis/graph": "1.1.0", - "@redis/json": "1.0.4", - "@redis/search": "1.1.2", - "@redis/time-series": "1.0.4" + "@redis/client": "1.6.0", + "@redis/graph": "1.1.1", + "@redis/json": "1.0.7", + "@redis/search": "1.2.0", + "@redis/time-series": "1.1.0" } }, "require-directory": { @@ -12872,9 +12818,9 @@ "dev": true }, "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "requires": { "debug": "2.6.9", "depd": "2.0.0", @@ -12906,6 +12852,11 @@ } } }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -12919,14 +12870,14 @@ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" }, "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "requires": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" } }, "set-function-length": { @@ -13299,13 +13250,13 @@ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" } }, "uri-js": { diff --git a/backend/package.json b/backend/package.json index 24e76e3dd..9ac3f9199 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "mempool-backend", - "version": "3.0.0-dev", + "version": "3.1.0-dev", "description": "Bitcoin mempool visualizer and blockchain explorer backend", "license": "GNU Affero General Public License v3.0", "homepage": "https://mempool.space", @@ -39,24 +39,24 @@ "prettier": "./node_modules/.bin/prettier --write \"src/**/*.{js,ts}\"" }, "dependencies": { - "@babel/core": "^7.24.0", + "@babel/core": "^7.25.2", "@mempool/electrum-client": "1.1.9", "@types/node": "^18.15.3", - "axios": "~1.7.2", + "axios": "1.7.2", "bitcoinjs-lib": "~6.1.3", "crypto-js": "~4.2.0", - "express": "~4.19.2", + "express": "~4.21.1", "maxmind": "~4.3.11", - "mysql2": "~3.10.0", + "mysql2": "~3.11.0", "rust-gbt": "file:./rust-gbt", - "redis": "^4.6.6", + "redis": "^4.7.0", "socks-proxy-agent": "~7.0.0", "typescript": "~4.9.3", "ws": "~8.18.0" }, "devDependencies": { "@babel/code-frame": "^7.18.6", - "@babel/core": "^7.24.0", + "@babel/core": "^7.25.2", "@types/compression": "^1.7.2", "@types/crypto-js": "^4.1.1", "@types/express": "^4.17.17", diff --git a/backend/src/__fixtures__/mempool-config.template.json b/backend/src/__fixtures__/mempool-config.template.json index 3796b7f22..a9f246767 100644 --- a/backend/src/__fixtures__/mempool-config.template.json +++ b/backend/src/__fixtures__/mempool-config.template.json @@ -28,6 +28,7 @@ "INDEXING_BLOCKS_AMOUNT": 14, "POOLS_JSON_TREE_URL": "__MEMPOOL_POOLS_JSON_TREE_URL__", "POOLS_JSON_URL": "__MEMPOOL_POOLS_JSON_URL__", + "POOLS_UPDATE_DELAY": 604800, "AUDIT": true, "RUST_GBT": false, "LIMIT_GBT": false, @@ -46,7 +47,8 @@ "PASSWORD": "__CORE_RPC_PASSWORD__", "TIMEOUT": 1000, "COOKIE": false, - "COOKIE_PATH": "__CORE_RPC_COOKIE_PATH__" + "COOKIE_PATH": "__CORE_RPC_COOKIE_PATH__", + "DEBUG_LOG_PATH": "__CORE_RPC_DEBUG_LOG_PATH__" }, "ELECTRUM": { "HOST": "__ELECTRUM_HOST__", diff --git a/backend/src/__tests__/api/common.ts b/backend/src/__tests__/api/common.ts index 74a7db88f..14ae3c78b 100644 --- a/backend/src/__tests__/api/common.ts +++ b/backend/src/__tests__/api/common.ts @@ -1,5 +1,5 @@ import { Common } from '../../api/common'; -import { MempoolTransactionExtended } from '../../mempool.interfaces'; +import { MempoolTransactionExtended, TransactionExtended } from '../../mempool.interfaces'; const randomTransactions = require('./test-data/transactions-random.json'); const replacedTransactions = require('./test-data/transactions-replaced.json'); @@ -10,14 +10,14 @@ describe('Common', () => { describe('RBF', () => { const newTransactions = rbfTransactions.concat(randomTransactions); test('should detect RBF transactions with fast method', () => { - const result: { [txid: string]: MempoolTransactionExtended[] } = Common.findRbfTransactions(newTransactions, replacedTransactions); + const result: { [txid: string]: { replaced: MempoolTransactionExtended[], replacedBy: TransactionExtended }} = Common.findRbfTransactions(newTransactions, replacedTransactions); expect(Object.values(result).length).toEqual(2); expect(result).toHaveProperty('7219d95161f3718335991ac6d967d24eedec370908c9879bb1e192e6d797d0a6'); expect(result).toHaveProperty('5387881d695d4564d397026dc5f740f816f8390b4b2c5ec8c20309122712a875'); }); test('should detect RBF transactions with scalable method', () => { - const result: { [txid: string]: MempoolTransactionExtended[] } = Common.findRbfTransactions(newTransactions, replacedTransactions, true); + const result: { [txid: string]: { replaced: MempoolTransactionExtended[], replacedBy: TransactionExtended }} = Common.findRbfTransactions(newTransactions, replacedTransactions, true); expect(Object.values(result).length).toEqual(2); expect(result).toHaveProperty('7219d95161f3718335991ac6d967d24eedec370908c9879bb1e192e6d797d0a6'); expect(result).toHaveProperty('5387881d695d4564d397026dc5f740f816f8390b4b2c5ec8c20309122712a875'); diff --git a/backend/src/__tests__/config.test.ts b/backend/src/__tests__/config.test.ts index 050213143..b3cf7e2a7 100644 --- a/backend/src/__tests__/config.test.ts +++ b/backend/src/__tests__/config.test.ts @@ -41,8 +41,9 @@ describe('Mempool Backend Config', () => { STDOUT_LOG_MIN_PRIORITY: 'debug', POOLS_JSON_TREE_URL: 'https://api.github.com/repos/mempool/mining-pools/git/trees/master', POOLS_JSON_URL: 'https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json', + POOLS_UPDATE_DELAY: 604800, AUDIT: false, - RUST_GBT: false, + RUST_GBT: true, LIMIT_GBT: false, CPFP_INDEXING: false, MAX_BLOCKS_BULK_QUERY: 0, @@ -73,7 +74,8 @@ describe('Mempool Backend Config', () => { PASSWORD: 'mempool', TIMEOUT: 60000, COOKIE: false, - COOKIE_PATH: '/bitcoin/.cookie' + COOKIE_PATH: '/bitcoin/.cookie', + DEBUG_LOG_PATH: '', }); expect(config.SECOND_CORE_RPC).toStrictEqual({ diff --git a/backend/src/api/about.routes.ts b/backend/src/api/about.routes.ts index 5e7d3b70e..2020d111d 100644 --- a/backend/src/api/about.routes.ts +++ b/backend/src/api/about.routes.ts @@ -70,7 +70,7 @@ class AboutRoutes { res.status(500).end(); } }) - .get(config.MEMPOOL.API_URL_PREFIX + 'services/account/images/:username', async (req, res) => { + .get(config.MEMPOOL.API_URL_PREFIX + 'services/account/images/:username/:md5', async (req, res) => { const url = `${config.MEMPOOL_SERVICES.API}/${req.originalUrl.replace('/api/v1/services/', '')}`; try { const response = await axios.get(url, { responseType: 'stream', timeout: 10000 }); diff --git a/backend/src/api/audit.ts b/backend/src/api/audit.ts index 4d05870e8..e09234cdc 100644 --- a/backend/src/api/audit.ts +++ b/backend/src/api/audit.ts @@ -2,24 +2,28 @@ import config from '../config'; import logger from '../logger'; import { MempoolTransactionExtended, MempoolBlockWithTransactions } from '../mempool.interfaces'; import rbfCache from './rbf-cache'; +import transactionUtils from './transaction-utils'; const PROPAGATION_MARGIN = 180; // in seconds, time since a transaction is first seen after which it is assumed to have propagated to all miners class Audit { - auditBlock(transactions: MempoolTransactionExtended[], projectedBlocks: MempoolBlockWithTransactions[], mempool: { [txId: string]: MempoolTransactionExtended }, useAccelerations: boolean = false) - : { censored: string[], added: string[], prioritized: string[], fresh: string[], sigop: string[], fullrbf: string[], accelerated: string[], score: number, similarity: number } { + auditBlock(height: number, transactions: MempoolTransactionExtended[], projectedBlocks: MempoolBlockWithTransactions[], mempool: { [txId: string]: MempoolTransactionExtended }) + : { unseen: string[], censored: string[], added: string[], prioritized: string[], fresh: string[], sigop: string[], fullrbf: string[], accelerated: string[], score: number, similarity: number } { if (!projectedBlocks?.[0]?.transactionIds || !mempool) { - return { censored: [], added: [], prioritized: [], fresh: [], sigop: [], fullrbf: [], accelerated: [], score: 1, similarity: 1 }; + return { unseen: [], censored: [], added: [], prioritized: [], fresh: [], sigop: [], fullrbf: [], accelerated: [], score: 1, similarity: 1 }; } const matches: string[] = []; // present in both mined block and template const added: string[] = []; // present in mined block, not in template - const prioritized: string[] = [] // present in the mined block, not in the template, but further down in the mempool + const unseen: string[] = []; // present in the mined block, not in our mempool + let prioritized: string[] = []; // higher in the block than would be expected by in-band feerate alone + let deprioritized: string[] = []; // lower in the block than would be expected by in-band feerate alone const fresh: string[] = []; // missing, but firstSeen or lastBoosted within PROPAGATION_MARGIN const rbf: string[] = []; // either missing or present, and either part of a full-rbf replacement, or a conflict with the mined block const accelerated: string[] = []; // prioritized by the mempool accelerator const isCensored = {}; // missing, without excuse const isDisplaced = {}; + const isAccelerated = {}; let displacedWeight = 0; let matchedWeight = 0; let projectedWeight = 0; @@ -32,6 +36,7 @@ class Audit { inBlock[tx.txid] = tx; if (mempool[tx.txid] && mempool[tx.txid].acceleration) { accelerated.push(tx.txid); + isAccelerated[tx.txid] = true; } } // coinbase is always expected @@ -113,11 +118,16 @@ class Audit { } else { if (rbfCache.has(tx.txid)) { rbf.push(tx.txid); - } else if (!isDisplaced[tx.txid]) { + if (!mempool[tx.txid] && !rbfCache.getReplacedBy(tx.txid)) { + unseen.push(tx.txid); + } + } else { if (mempool[tx.txid]) { - prioritized.push(tx.txid); + if (isDisplaced[tx.txid]) { + added.push(tx.txid); + } } else { - added.push(tx.txid); + unseen.push(tx.txid); } } overflowWeight += tx.weight; @@ -125,6 +135,8 @@ class Audit { totalWeight += tx.weight; } + ({ prioritized, deprioritized } = transactionUtils.identifyPrioritizedTransactions(transactions, 'effectiveFeePerVsize')); + // transactions missing from near the end of our template are probably not being censored let overflowWeightRemaining = overflowWeight - (config.MEMPOOL.BLOCK_WEIGHT_UNITS - totalWeight); let maxOverflowRate = 0; @@ -165,6 +177,7 @@ class Audit { const similarity = projectedWeight ? matchedWeight / projectedWeight : 1; return { + unseen, censored: Object.keys(isCensored), added, prioritized, diff --git a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts index 8413afd9f..e246f249d 100644 --- a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts +++ b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts @@ -1,4 +1,4 @@ -import { IBitcoinApi, TestMempoolAcceptResult } from './bitcoin-api.interface'; +import { IBitcoinApi, SubmitPackageResult, TestMempoolAcceptResult } from './bitcoin-api.interface'; import { IEsploraApi } from './esplora-api.interface'; export interface AbstractBitcoinApi { @@ -23,6 +23,7 @@ export interface AbstractBitcoinApi { $getScriptHashTransactions(address: string, lastSeenTxId: string): Promise; $sendRawTransaction(rawTransaction: string): Promise; $testMempoolAccept(rawTransactions: string[], maxfeerate?: number): Promise; + $submitPackage(rawTransactions: string[], maxfeerate?: number, maxburnamount?: number): Promise; $getOutspend(txId: string, vout: number): Promise; $getOutspends(txId: string): Promise; $getBatchedOutspends(txId: string[]): Promise; diff --git a/backend/src/api/bitcoin/bitcoin-api.interface.ts b/backend/src/api/bitcoin/bitcoin-api.interface.ts index 6e8583f6f..5d8371d27 100644 --- a/backend/src/api/bitcoin/bitcoin-api.interface.ts +++ b/backend/src/api/bitcoin/bitcoin-api.interface.ts @@ -218,3 +218,21 @@ export interface TestMempoolAcceptResult { }, ['reject-reason']?: string, } + +export interface SubmitPackageResult { + package_msg: string; + "tx-results": { [wtxid: string]: TxResult }; + "replaced-transactions"?: string[]; +} + +export interface TxResult { + txid: string; + "other-wtxid"?: string; + vsize?: number; + fees?: { + base: number; + "effective-feerate"?: number; + "effective-includes"?: string[]; + }; + error?: string; +} diff --git a/backend/src/api/bitcoin/bitcoin-api.ts b/backend/src/api/bitcoin/bitcoin-api.ts index 0b62f672d..b78c15bf2 100644 --- a/backend/src/api/bitcoin/bitcoin-api.ts +++ b/backend/src/api/bitcoin/bitcoin-api.ts @@ -1,6 +1,6 @@ import * as bitcoinjs from 'bitcoinjs-lib'; import { AbstractBitcoinApi, HealthCheckHost } from './bitcoin-api-abstract-factory'; -import { IBitcoinApi, TestMempoolAcceptResult } from './bitcoin-api.interface'; +import { IBitcoinApi, SubmitPackageResult, TestMempoolAcceptResult } from './bitcoin-api.interface'; import { IEsploraApi } from './esplora-api.interface'; import blocks from '../blocks'; import mempool from '../mempool'; @@ -196,6 +196,10 @@ class BitcoinApi implements AbstractBitcoinApi { } } + $submitPackage(rawTransactions: string[], maxfeerate?: number, maxburnamount?: number): Promise { + return this.bitcoindClient.submitPackage(rawTransactions, maxfeerate ?? undefined, maxburnamount ?? undefined); + } + async $getOutspend(txId: string, vout: number): Promise { const txOut = await this.bitcoindClient.getTxOut(txId, vout, false); return { @@ -327,6 +331,7 @@ class BitcoinApi implements AbstractBitcoinApi { 'witness_v1_taproot': 'v1_p2tr', 'nonstandard': 'nonstandard', 'multisig': 'multisig', + 'anchor': 'anchor', 'nulldata': 'op_return' }; diff --git a/backend/src/api/bitcoin/bitcoin-core.routes.ts b/backend/src/api/bitcoin/bitcoin-core.routes.ts index 7933dc17b..2c3dd08f6 100644 --- a/backend/src/api/bitcoin/bitcoin-core.routes.ts +++ b/backend/src/api/bitcoin/bitcoin-core.routes.ts @@ -1,6 +1,7 @@ import { Application, NextFunction, Request, Response } from 'express'; import logger from '../../logger'; import bitcoinClient from './bitcoin-client'; +import config from '../../config'; /** * Define a set of routes used by the accelerator server @@ -11,15 +12,15 @@ class BitcoinBackendRoutes { public initRoutes(app: Application) { app - .get('/api/internal/bitcoin-core/' + 'get-mempool-entry', this.disableCache, this.$getMempoolEntry) - .post('/api/internal/bitcoin-core/' + 'decode-raw-transaction', this.disableCache, this.$decodeRawTransaction) - .get('/api/internal/bitcoin-core/' + 'get-raw-transaction', this.disableCache, this.$getRawTransaction) - .post('/api/internal/bitcoin-core/' + 'send-raw-transaction', this.disableCache, this.$sendRawTransaction) - .post('/api/internal/bitcoin-core/' + 'test-mempool-accept', this.disableCache, this.$testMempoolAccept) - .get('/api/internal/bitcoin-core/' + 'get-mempool-ancestors', this.disableCache, this.$getMempoolAncestors) - .get('/api/internal/bitcoin-core/' + 'get-block', this.disableCache, this.$getBlock) - .get('/api/internal/bitcoin-core/' + 'get-block-hash', this.disableCache, this.$getBlockHash) - .get('/api/internal/bitcoin-core/' + 'get-block-count', this.disableCache, this.$getBlockCount) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'get-mempool-entry', this.disableCache, this.$getMempoolEntry) + .post(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'decode-raw-transaction', this.disableCache, this.$decodeRawTransaction) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'get-raw-transaction', this.disableCache, this.$getRawTransaction) + .post(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'send-raw-transaction', this.disableCache, this.$sendRawTransaction) + .post(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'test-mempool-accept', this.disableCache, this.$testMempoolAccept) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'get-mempool-ancestors', this.disableCache, this.$getMempoolAncestors) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'get-block', this.disableCache, this.$getBlock) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'get-block-hash', this.disableCache, this.$getBlockHash) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'get-block-count', this.disableCache, this.$getBlockCount) ; } diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index a65af3f19..d2d298e09 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -20,6 +20,7 @@ import difficultyAdjustment from '../difficulty-adjustment'; import transactionRepository from '../../repositories/TransactionRepository'; import rbfCache from '../rbf-cache'; import { calculateMempoolTxCpfp } from '../cpfp'; +import { handleError } from '../../utils/api'; class BitcoinRoutes { public initRoutes(app: Application) { @@ -41,12 +42,15 @@ class BitcoinRoutes { .get(config.MEMPOOL.API_URL_PREFIX + 'blocks/:height', this.getBlocks.bind(this)) .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash', this.getBlock) .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/summary', this.getStrippedBlockTransactions) + .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/tx/:txid/summary', this.getStrippedBlockTransaction) .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/audit-summary', this.getBlockAuditSummary) .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/tx/:txid/audit', this.$getBlockTxAuditSummary) .get(config.MEMPOOL.API_URL_PREFIX + 'blocks/tip/height', this.getBlockTipHeight) .post(config.MEMPOOL.API_URL_PREFIX + 'psbt/addparents', this.postPsbtCompletion) .get(config.MEMPOOL.API_URL_PREFIX + 'blocks-bulk/:from', this.getBlocksByBulk.bind(this)) .get(config.MEMPOOL.API_URL_PREFIX + 'blocks-bulk/:from/:to', this.getBlocksByBulk.bind(this)) + // Temporarily add txs/package endpoint for all backends until esplora supports it + .post(config.MEMPOOL.API_URL_PREFIX + 'txs/package', this.$submitPackage) ; if (config.MEMPOOL.BACKEND !== 'esplora') { @@ -86,7 +90,7 @@ class BitcoinRoutes { res.set('Content-Type', 'application/json'); res.send(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -105,13 +109,13 @@ class BitcoinRoutes { const result = mempoolBlocks.getMempoolBlocks(); res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private getTransactionTimes(req: Request, res: Response) { if (!Array.isArray(req.query.txId)) { - res.status(500).send('Not an array'); + handleError(req, res, 500, 'Not an array'); return; } const txIds: string[] = []; @@ -128,12 +132,12 @@ class BitcoinRoutes { private async $getBatchedOutspends(req: Request, res: Response): Promise { const txids_csv = req.query.txids; if (!txids_csv || typeof txids_csv !== 'string') { - res.status(500).send('Invalid txids format'); + handleError(req, res, 500, 'Invalid txids format'); return; } const txids = txids_csv.split(','); if (txids.length > 50) { - res.status(400).send('Too many txids requested'); + handleError(req, res, 400, 'Too many txids requested'); return; } @@ -141,13 +145,13 @@ class BitcoinRoutes { const batchedOutspends = await bitcoinApi.$getBatchedOutspends(txids); res.json(batchedOutspends); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async $getCpfpInfo(req: Request, res: Response) { if (!/^[a-fA-F0-9]{64}$/.test(req.params.txId)) { - res.status(501).send(`Invalid transaction ID.`); + handleError(req, res, 501, `Invalid transaction ID.`); return; } @@ -165,6 +169,7 @@ class BitcoinRoutes { acceleration: tx.acceleration, acceleratedBy: tx.acceleratedBy || undefined, acceleratedAt: tx.acceleratedAt || undefined, + feeDelta: tx.feeDelta || undefined, }); return; } @@ -179,7 +184,7 @@ class BitcoinRoutes { try { cpfpInfo = await transactionRepository.$getCpfpInfo(req.params.txId); } catch (e) { - res.status(500).send('failed to get CPFP info'); + handleError(req, res, 500, 'failed to get CPFP info'); return; } } @@ -208,7 +213,7 @@ class BitcoinRoutes { if (e instanceof Error && e instanceof Error && e.message && e.message.indexOf('No such mempool or blockchain transaction') > -1) { statusCode = 404; } - res.status(statusCode).send(e instanceof Error ? e.message : e); + handleError(req, res, statusCode, e instanceof Error ? e.message : e); } } @@ -222,7 +227,7 @@ class BitcoinRoutes { if (e instanceof Error && e.message && e.message.indexOf('No such mempool or blockchain transaction') > -1) { statusCode = 404; } - res.status(statusCode).send(e instanceof Error ? e.message : e); + handleError(req, res, statusCode, e instanceof Error ? e.message : e); } } @@ -283,13 +288,13 @@ class BitcoinRoutes { // Not modified // 422 Unprocessable Entity // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/422 - res.status(422).send(`Psbt had no missing nonWitnessUtxos.`); + handleError(req, res, 422, `Psbt had no missing nonWitnessUtxos.`); } } catch (e: any) { if (e instanceof Error && new RegExp(notFoundError).test(e.message)) { - res.status(404).send(e.message); + handleError(req, res, 404, e.message); } else { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } } @@ -303,7 +308,7 @@ class BitcoinRoutes { if (e instanceof Error && e.message && e.message.indexOf('No such mempool or blockchain transaction') > -1) { statusCode = 404; } - res.status(statusCode).send(e instanceof Error ? e.message : e); + handleError(req, res, statusCode, e instanceof Error ? e.message : e); } } @@ -312,6 +317,20 @@ class BitcoinRoutes { const transactions = await blocks.$getStrippedBlockTransactions(req.params.hash); res.setHeader('Expires', new Date(Date.now() + 1000 * 3600 * 24 * 30).toUTCString()); res.json(transactions); + } catch (e) { + handleError(req, res, 500, e instanceof Error ? e.message : e); + } + } + + private async getStrippedBlockTransaction(req: Request, res: Response) { + try { + const transaction = await blocks.$getSingleTxFromSummary(req.params.hash, req.params.txid); + if (!transaction) { + handleError(req, res, 404, `transaction not found in summary`); + return; + } + res.setHeader('Expires', new Date(Date.now() + 1000 * 3600 * 24 * 30).toUTCString()); + res.json(transaction); } catch (e) { res.status(500).send(e instanceof Error ? e.message : e); } @@ -335,7 +354,7 @@ class BitcoinRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * cacheDuration).toUTCString()); res.json(block); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -345,7 +364,7 @@ class BitcoinRoutes { res.setHeader('content-type', 'text/plain'); res.send(blockHeader); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -356,10 +375,11 @@ class BitcoinRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 3600 * 24 * 30).toUTCString()); res.json(auditSummary); } else { - return res.status(404).send(`audit not available`); + handleError(req, res, 404, `audit not available`); + return; } } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -370,7 +390,8 @@ class BitcoinRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 3600 * 24 * 30).toUTCString()); res.json(auditSummary); } else { - return res.status(404).send(`transaction audit not available`); + handleError(req, res, 404, `transaction audit not available`); + return; } } catch (e) { res.status(500).send(e instanceof Error ? e.message : e); @@ -387,42 +408,49 @@ class BitcoinRoutes { return await this.getLegacyBlocks(req, res); } } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async getBlocksByBulk(req: Request, res: Response) { try { if (['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK) === false) { // Liquid - Not implemented - return res.status(404).send(`This API is only available for Bitcoin networks`); + handleError(req, res, 404, `This API is only available for Bitcoin networks`); + return; } if (config.MEMPOOL.MAX_BLOCKS_BULK_QUERY <= 0) { - return res.status(404).send(`This API is disabled. Set config.MEMPOOL.MAX_BLOCKS_BULK_QUERY to a positive number to enable it.`); + handleError(req, res, 404, `This API is disabled. Set config.MEMPOOL.MAX_BLOCKS_BULK_QUERY to a positive number to enable it.`); + return; } if (!Common.indexingEnabled()) { - return res.status(404).send(`Indexing is required for this API`); + handleError(req, res, 404, `Indexing is required for this API`); + return; } const from = parseInt(req.params.from, 10); if (!req.params.from || from < 0) { - return res.status(400).send(`Parameter 'from' must be a block height (integer)`); + handleError(req, res, 400, `Parameter 'from' must be a block height (integer)`); + return; } const to = req.params.to === undefined ? await bitcoinApi.$getBlockHeightTip() : parseInt(req.params.to, 10); if (to < 0) { - return res.status(400).send(`Parameter 'to' must be a block height (integer)`); + handleError(req, res, 400, `Parameter 'to' must be a block height (integer)`); + return; } if (from > to) { - return res.status(400).send(`Parameter 'to' must be a higher block height than 'from'`); + handleError(req, res, 400, `Parameter 'to' must be a higher block height than 'from'`); + return; } if ((to - from + 1) > config.MEMPOOL.MAX_BLOCKS_BULK_QUERY) { - return res.status(400).send(`You can only query ${config.MEMPOOL.MAX_BLOCKS_BULK_QUERY} blocks at once.`); + handleError(req, res, 400, `You can only query ${config.MEMPOOL.MAX_BLOCKS_BULK_QUERY} blocks at once.`); + return; } res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(await blocks.$getBlocksBetweenHeight(from, to)); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -457,10 +485,10 @@ class BitcoinRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(returnBlocks); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } - + private async getBlockTransactions(req: Request, res: Response) { try { loadingIndicators.setProgress('blocktxs-' + req.params.hash, 0); @@ -482,7 +510,7 @@ class BitcoinRoutes { res.json(transactions); } catch (e) { loadingIndicators.setProgress('blocktxs-' + req.params.hash, 100); - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -491,13 +519,13 @@ class BitcoinRoutes { const blockHash = await bitcoinApi.$getBlockHash(parseInt(req.params.height, 10)); res.send(blockHash); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async getAddress(req: Request, res: Response) { if (config.MEMPOOL.BACKEND === 'none') { - res.status(405).send('Address lookups cannot be used with bitcoind as backend.'); + handleError(req, res, 405, 'Address lookups cannot be used with bitcoind as backend.'); return; } @@ -506,15 +534,16 @@ class BitcoinRoutes { res.json(addressData); } catch (e) { if (e instanceof Error && e.message && (e.message.indexOf('too long') > 0 || e.message.indexOf('confirmed status') > 0)) { - return res.status(413).send(e instanceof Error ? e.message : e); + handleError(req, res, 413, e instanceof Error ? e.message : e); + return; } - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async getAddressTransactions(req: Request, res: Response): Promise { if (config.MEMPOOL.BACKEND === 'none') { - res.status(405).send('Address lookups cannot be used with bitcoind as backend.'); + handleError(req, res, 405, 'Address lookups cannot be used with bitcoind as backend.'); return; } @@ -527,23 +556,23 @@ class BitcoinRoutes { res.json(transactions); } catch (e) { if (e instanceof Error && e.message && (e.message.indexOf('too long') > 0 || e.message.indexOf('confirmed status') > 0)) { - res.status(413).send(e instanceof Error ? e.message : e); + handleError(req, res, 413, e instanceof Error ? e.message : e); return; } - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async getAddressTransactionSummary(req: Request, res: Response): Promise { if (config.MEMPOOL.BACKEND !== 'esplora') { - res.status(405).send('Address summary lookups require mempool/electrs backend.'); + handleError(req, res, 405, 'Address summary lookups require mempool/electrs backend.'); return; } } private async getScriptHash(req: Request, res: Response) { if (config.MEMPOOL.BACKEND === 'none') { - res.status(405).send('Address lookups cannot be used with bitcoind as backend.'); + handleError(req, res, 405, 'Address lookups cannot be used with bitcoind as backend.'); return; } @@ -554,15 +583,16 @@ class BitcoinRoutes { res.json(addressData); } catch (e) { if (e instanceof Error && e.message && (e.message.indexOf('too long') > 0 || e.message.indexOf('confirmed status') > 0)) { - return res.status(413).send(e instanceof Error ? e.message : e); + handleError(req, res, 413, e instanceof Error ? e.message : e); + return; } - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async getScriptHashTransactions(req: Request, res: Response): Promise { if (config.MEMPOOL.BACKEND === 'none') { - res.status(405).send('Address lookups cannot be used with bitcoind as backend.'); + handleError(req, res, 405, 'Address lookups cannot be used with bitcoind as backend.'); return; } @@ -577,16 +607,16 @@ class BitcoinRoutes { res.json(transactions); } catch (e) { if (e instanceof Error && e.message && (e.message.indexOf('too long') > 0 || e.message.indexOf('confirmed status') > 0)) { - res.status(413).send(e instanceof Error ? e.message : e); + handleError(req, res, 413, e instanceof Error ? e.message : e); return; } - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async getScriptHashTransactionSummary(req: Request, res: Response): Promise { if (config.MEMPOOL.BACKEND !== 'esplora') { - res.status(405).send('Scripthash summary lookups require mempool/electrs backend.'); + handleError(req, res, 405, 'Scripthash summary lookups require mempool/electrs backend.'); return; } } @@ -596,7 +626,7 @@ class BitcoinRoutes { const blockHash = await bitcoinApi.$getAddressPrefix(req.params.prefix); res.send(blockHash); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -623,7 +653,7 @@ class BitcoinRoutes { const rawMempool = await bitcoinApi.$getRawMempool(); res.send(rawMempool); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -631,12 +661,13 @@ class BitcoinRoutes { try { const result = blocks.getCurrentBlockHeight(); if (!result) { - return res.status(503).send(`Service Temporarily Unavailable`); + handleError(req, res, 503, `Service Temporarily Unavailable`); + return; } res.setHeader('content-type', 'text/plain'); res.send(result.toString()); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -646,7 +677,7 @@ class BitcoinRoutes { res.setHeader('content-type', 'text/plain'); res.send(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -656,7 +687,7 @@ class BitcoinRoutes { res.setHeader('content-type', 'application/octet-stream'); res.send(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -665,7 +696,7 @@ class BitcoinRoutes { const result = await bitcoinApi.$getTxIdsForBlock(req.params.hash); res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -674,7 +705,7 @@ class BitcoinRoutes { const result = await bitcoinClient.validateAddress(req.params.address); res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -687,7 +718,7 @@ class BitcoinRoutes { replaces }); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -696,7 +727,7 @@ class BitcoinRoutes { const result = rbfCache.getRbfTrees(false); res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -705,7 +736,7 @@ class BitcoinRoutes { const result = rbfCache.getRbfTrees(true); res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -718,7 +749,7 @@ class BitcoinRoutes { res.status(204).send(); } } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -727,7 +758,7 @@ class BitcoinRoutes { const result = await bitcoinApi.$getOutspends(req.params.txId); res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -737,10 +768,10 @@ class BitcoinRoutes { if (da) { res.json(da); } else { - res.status(503).send(`Service Temporarily Unavailable`); + handleError(req, res, 503, `Service Temporarily Unavailable`); } } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -751,7 +782,7 @@ class BitcoinRoutes { const txIdResult = await bitcoinApi.$sendRawTransaction(rawTx); res.send(txIdResult); } catch (e: any) { - res.status(400).send(e.message && e.code ? 'sendrawtransaction RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) + handleError(req, res, 400, e.message && e.code ? 'sendrawtransaction RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) : (e.message || 'Error')); } } @@ -763,7 +794,7 @@ class BitcoinRoutes { const txIdResult = await bitcoinClient.sendRawTransaction(txHex); res.send(txIdResult); } catch (e: any) { - res.status(400).send(e.message && e.code ? 'sendrawtransaction RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) + handleError(req, res, 400, e.message && e.code ? 'sendrawtransaction RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) : (e.message || 'Error')); } } @@ -775,8 +806,20 @@ class BitcoinRoutes { const result = await bitcoinApi.$testMempoolAccept(rawTxs, maxfeerate); res.send(result); } catch (e: any) { - res.setHeader('content-type', 'text/plain'); - res.status(400).send(e.message && e.code ? 'testmempoolaccept RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) + handleError(req, res, 400, e.message && e.code ? 'testmempoolaccept RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) + : (e.message || 'Error')); + } + } + + private async $submitPackage(req: Request, res: Response) { + try { + const rawTxs = Common.getTransactionsFromRequest(req); + const maxfeerate = parseFloat(req.query.maxfeerate as string); + const maxburnamount = parseFloat(req.query.maxburnamount as string); + const result = await bitcoinClient.submitPackage(rawTxs, maxfeerate ?? undefined, maxburnamount ?? undefined); + res.send(result); + } catch (e: any) { + handleError(req, res, 400, e.message && e.code ? 'submitpackage RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) : (e.message || 'Error')); } } diff --git a/backend/src/api/bitcoin/esplora-api.ts b/backend/src/api/bitcoin/esplora-api.ts index a27ca35e9..9a4b7706a 100644 --- a/backend/src/api/bitcoin/esplora-api.ts +++ b/backend/src/api/bitcoin/esplora-api.ts @@ -5,7 +5,7 @@ import { AbstractBitcoinApi, HealthCheckHost } from './bitcoin-api-abstract-fact import { IEsploraApi } from './esplora-api.interface'; import logger from '../../logger'; import { Common } from '../common'; -import { TestMempoolAcceptResult } from './bitcoin-api.interface'; +import { SubmitPackageResult, TestMempoolAcceptResult } from './bitcoin-api.interface'; interface FailoverHost { host: string, @@ -305,7 +305,7 @@ class ElectrsApi implements AbstractBitcoinApi { } $getAddress(address: string): Promise { - throw new Error('Method getAddress not implemented.'); + return this.failoverRouter.$get('/address/' + address); } $getAddressTransactions(address: string, txId?: string): Promise { @@ -332,6 +332,10 @@ class ElectrsApi implements AbstractBitcoinApi { throw new Error('Method not implemented.'); } + $submitPackage(rawTransactions: string[]): Promise { + throw new Error('Method not implemented.'); + } + $getOutspend(txId: string, vout: number): Promise { return this.failoverRouter.$get('/tx/' + txId + '/outspend/' + vout); } diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 762c81ff7..e621056ab 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -33,6 +33,8 @@ import AccelerationRepository from '../repositories/AccelerationRepository'; import { calculateFastBlockCpfp, calculateGoodBlockCpfp } from './cpfp'; import mempool from './mempool'; import CpfpRepository from '../repositories/CpfpRepository'; +import accelerationApi from './services/acceleration'; +import { parseDATUMTemplateCreator } from '../utils/bitcoin-script'; class Blocks { private blocks: BlockExtended[] = []; @@ -218,10 +220,10 @@ class Blocks { }; } - public summarizeBlockTransactions(hash: string, transactions: TransactionExtended[]): BlockSummary { + public summarizeBlockTransactions(hash: string, height: number, transactions: TransactionExtended[]): BlockSummary { return { id: hash, - transactions: Common.classifyTransactions(transactions), + transactions: Common.classifyTransactions(transactions, height), }; } @@ -341,7 +343,12 @@ class Blocks { id: pool.uniqueId, name: pool.name, slug: pool.slug, + minerNames: null, }; + + if (extras.pool.name === 'OCEAN') { + extras.pool.minerNames = parseDATUMTemplateCreator(extras.coinbaseRaw); + } } extras.matchRate = null; @@ -405,8 +412,16 @@ class Blocks { } try { + const blockchainInfo = await bitcoinClient.getBlockchainInfo(); + const currentBlockHeight = blockchainInfo.blocks; + let indexingBlockAmount = Math.min(config.MEMPOOL.INDEXING_BLOCKS_AMOUNT, currentBlockHeight); + if (indexingBlockAmount <= -1) { + indexingBlockAmount = currentBlockHeight + 1; + } + const lastBlockToIndex = Math.max(0, currentBlockHeight - indexingBlockAmount + 1); + // Get all indexed block hash - const indexedBlocks = await blocksRepository.$getIndexedBlocks(); + const indexedBlocks = (await blocksRepository.$getIndexedBlocks()).filter(block => block.height >= lastBlockToIndex); const indexedBlockSummariesHashesArray = await BlocksSummariesRepository.$getIndexedSummariesId(); const indexedBlockSummariesHashes = {}; // Use a map for faster seek during the indexing loop @@ -439,7 +454,7 @@ class Blocks { if (config.MEMPOOL.BACKEND === 'esplora') { - const txs = (await bitcoinApi.$getTxsForBlock(block.hash)).map(tx => transactionUtils.extendTransaction(tx)); + const txs = (await bitcoinApi.$getTxsForBlock(block.hash)).map(tx => transactionUtils.extendMempoolTransaction(tx)); const cpfpSummary = await this.$indexCPFP(block.hash, block.height, txs); if (cpfpSummary) { await this.$getStrippedBlockTransactions(block.hash, true, true, cpfpSummary, block.height); // This will index the block summary @@ -615,7 +630,7 @@ class Blocks { // add CPFP const cpfpSummary = calculateGoodBlockCpfp(height, txs, []); // classify - const { transactions: classifiedTxs } = this.summarizeBlockTransactions(blockHash, cpfpSummary.transactions); + const { transactions: classifiedTxs } = this.summarizeBlockTransactions(blockHash, height, cpfpSummary.transactions); await BlocksSummariesRepository.$saveTransactions(height, blockHash, classifiedTxs, 2); if (unclassifiedBlocks[height].version < 2 && targetSummaryVersion === 2) { const cpfpClusters = await CpfpRepository.$getClustersAt(height); @@ -652,7 +667,7 @@ class Blocks { } const cpfpSummary = calculateGoodBlockCpfp(height, templateTxs?.filter(tx => tx['effectiveFeePerVsize'] != null) as MempoolTransactionExtended[], []); // classify - const { transactions: classifiedTxs } = this.summarizeBlockTransactions(blockHash, cpfpSummary.transactions); + const { transactions: classifiedTxs } = this.summarizeBlockTransactions(blockHash, height, cpfpSummary.transactions); const classifiedTxMap: { [txid: string]: TransactionClassified } = {}; for (const tx of classifiedTxs) { classifiedTxMap[tx.txid] = tx; @@ -904,9 +919,14 @@ class Blocks { } } - const cpfpSummary: CpfpSummary = calculateGoodBlockCpfp(block.height, transactions, Object.values(mempool.getAccelerations()).map(a => ({ txid: a.txid, max_bid: a.feeDelta }))); + let accelerations = Object.values(mempool.getAccelerations()); + if (accelerations?.length > 0) { + const pool = await this.$findBlockMiner(transactionUtils.stripCoinbaseTransaction(transactions[0])); + accelerations = accelerations.filter(a => a.pools.includes(pool.uniqueId)); + } + const cpfpSummary: CpfpSummary = calculateGoodBlockCpfp(block.height, transactions, accelerations.map(a => ({ txid: a.txid, max_bid: a.feeDelta }))); const blockExtended: BlockExtended = await this.$getBlockExtended(block, cpfpSummary.transactions); - const blockSummary: BlockSummary = this.summarizeBlockTransactions(block.id, cpfpSummary.transactions); + const blockSummary: BlockSummary = this.summarizeBlockTransactions(block.id, block.height, cpfpSummary.transactions); this.updateTimerProgress(timer, `got block data for ${this.currentBlockHeight}`); if (Common.indexingEnabled()) { @@ -927,12 +947,12 @@ class Blocks { const newBlock = await this.$indexBlock(lastBlock.height - i); this.blocks.push(newBlock); this.updateTimerProgress(timer, `reindexed block`); - let cpfpSummary; + let newCpfpSummary; if (config.MEMPOOL.CPFP_INDEXING) { - cpfpSummary = await this.$indexCPFP(newBlock.id, lastBlock.height - i); + newCpfpSummary = await this.$indexCPFP(newBlock.id, lastBlock.height - i); this.updateTimerProgress(timer, `reindexed block cpfp`); } - await this.$getStrippedBlockTransactions(newBlock.id, true, true, cpfpSummary, newBlock.height); + await this.$getStrippedBlockTransactions(newBlock.id, true, true, newCpfpSummary, newBlock.height); this.updateTimerProgress(timer, `reindexed block summary`); } await mining.$indexDifficultyAdjustments(); @@ -981,7 +1001,7 @@ class Blocks { // start async callbacks this.updateTimerProgress(timer, `starting async callbacks for ${this.currentBlockHeight}`); - const callbackPromises = this.newAsyncBlockCallbacks.map((cb) => cb(blockExtended, txIds, transactions)); + const callbackPromises = this.newAsyncBlockCallbacks.map((cb) => cb(blockExtended, txIds, cpfpSummary.transactions)); if (block.height % 2016 === 0) { if (Common.indexingEnabled()) { @@ -1163,7 +1183,7 @@ class Blocks { transactions: cpfpSummary.transactions.map(tx => { let flags: number = 0; try { - flags = Common.getTransactionFlags(tx); + flags = Common.getTransactionFlags(tx, height); } catch (e) { logger.warn('Failed to classify transaction: ' + (e instanceof Error ? e.message : e)); } @@ -1178,11 +1198,11 @@ class Blocks { }; }), }; - summaryVersion = 1; + summaryVersion = cpfpSummary.version; } else { if (config.MEMPOOL.BACKEND === 'esplora') { const txs = (await bitcoinApi.$getTxsForBlock(hash)).map(tx => transactionUtils.extendTransaction(tx)); - summary = this.summarizeBlockTransactions(hash, txs); + summary = this.summarizeBlockTransactions(hash, height || 0, txs); summaryVersion = 1; } else { // Call Core RPC @@ -1204,6 +1224,11 @@ class Blocks { return summary.transactions; } + public async $getSingleTxFromSummary(hash: string, txid: string): Promise { + const txs = await this.$getStrippedBlockTransactions(hash); + return txs.find(tx => tx.txid === txid) || null; + } + /** * Get 15 blocks * @@ -1318,7 +1343,7 @@ class Blocks { let summaryVersion = 0; if (config.MEMPOOL.BACKEND === 'esplora') { const txs = (await bitcoinApi.$getTxsForBlock(cleanBlock.hash)).map(tx => transactionUtils.extendTransaction(tx)); - summary = this.summarizeBlockTransactions(cleanBlock.hash, txs); + summary = this.summarizeBlockTransactions(cleanBlock.hash, cleanBlock.height, txs); summaryVersion = 1; } else { // Call Core RPC @@ -1397,11 +1422,11 @@ class Blocks { return this.currentBlockHeight; } - public async $indexCPFP(hash: string, height: number, txs?: TransactionExtended[]): Promise { + public async $indexCPFP(hash: string, height: number, txs?: MempoolTransactionExtended[]): Promise { let transactions = txs; if (!transactions) { if (config.MEMPOOL.BACKEND === 'esplora') { - transactions = (await bitcoinApi.$getTxsForBlock(hash)).map(tx => transactionUtils.extendTransaction(tx)); + transactions = (await bitcoinApi.$getTxsForBlock(hash)).map(tx => transactionUtils.extendMempoolTransaction(tx)); } if (!transactions) { const block = await bitcoinClient.getBlock(hash, 2); @@ -1413,7 +1438,7 @@ class Blocks { } if (transactions?.length != null) { - const summary = calculateFastBlockCpfp(height, transactions as TransactionExtended[]); + const summary = calculateFastBlockCpfp(height, transactions); await this.$saveCpfp(hash, height, summary); diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index cba39a511..50de63afc 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -1,6 +1,6 @@ import * as bitcoinjs from 'bitcoinjs-lib'; import { Request } from 'express'; -import { CpfpInfo, CpfpSummary, CpfpCluster, EffectiveFeeStats, MempoolBlockWithTransactions, TransactionExtended, MempoolTransactionExtended, TransactionStripped, WorkingEffectiveFeeStats, TransactionClassified, TransactionFlags } from '../mempool.interfaces'; +import { EffectiveFeeStats, MempoolBlockWithTransactions, TransactionExtended, MempoolTransactionExtended, TransactionStripped, WorkingEffectiveFeeStats, TransactionClassified, TransactionFlags } from '../mempool.interfaces'; import config from '../config'; import { NodeSocket } from '../repositories/NodesSocketsRepository'; import { isIP } from 'net'; @@ -10,7 +10,6 @@ import logger from '../logger'; import { getVarIntLength, opcodes, parseMultisigScript } from '../utils/bitcoin-script'; // Bitcoin Core default policy settings -const TX_MAX_STANDARD_VERSION = 2; const MAX_STANDARD_TX_WEIGHT = 400_000; const MAX_BLOCK_SIGOPS_COST = 80_000; const MAX_STANDARD_TX_SIGOPS_COST = (MAX_BLOCK_SIGOPS_COST / 5); @@ -80,8 +79,8 @@ export class Common { return arr; } - static findRbfTransactions(added: MempoolTransactionExtended[], deleted: MempoolTransactionExtended[], forceScalable = false): { [txid: string]: MempoolTransactionExtended[] } { - const matches: { [txid: string]: MempoolTransactionExtended[] } = {}; + static findRbfTransactions(added: MempoolTransactionExtended[], deleted: MempoolTransactionExtended[], forceScalable = false): { [txid: string]: { replaced: MempoolTransactionExtended[], replacedBy: TransactionExtended }} { + const matches: { [txid: string]: { replaced: MempoolTransactionExtended[], replacedBy: TransactionExtended }} = {}; // For small N, a naive nested loop is extremely fast, but it doesn't scale if (added.length < 1000 && deleted.length < 50 && !forceScalable) { @@ -96,7 +95,7 @@ export class Common { addedTx.vin.some((vin) => vin.txid === deletedVin.txid && vin.vout === deletedVin.vout)); }); if (foundMatches?.length) { - matches[addedTx.txid] = [...new Set(foundMatches)]; + matches[addedTx.txid] = { replaced: [...new Set(foundMatches)], replacedBy: addedTx }; } }); } else { @@ -124,7 +123,7 @@ export class Common { foundMatches.add(deletedTx); } if (foundMatches.size) { - matches[addedTx.txid] = [...foundMatches]; + matches[addedTx.txid] = { replaced: [...foundMatches], replacedBy: addedTx }; } } } @@ -139,17 +138,17 @@ export class Common { const replaced: Set = new Set(); for (let i = 0; i < tx.vin.length; i++) { const vin = tx.vin[i]; - const match = spendMap.get(`${vin.txid}:${vin.vout}`); + const key = `${vin.txid}:${vin.vout}`; + const match = spendMap.get(key); if (match && match.txid !== tx.txid) { replaced.add(match); // remove this tx from the spendMap // prevents the same tx being replaced more than once for (const replacedVin of match.vin) { - const key = `${replacedVin.txid}:${replacedVin.vout}`; - spendMap.delete(key); + const replacedKey = `${replacedVin.txid}:${replacedVin.vout}`; + spendMap.delete(replacedKey); } } - const key = `${vin.txid}:${vin.vout}`; spendMap.delete(key); } if (replaced.size) { @@ -200,10 +199,13 @@ export class Common { * * returns true early if any standardness rule is violated, otherwise false * (except for non-mandatory-script-verify-flag and p2sh script evaluation rules which are *not* enforced) + * + * As standardness rules change, we'll need to apply the rules in force *at the time* to older blocks. + * For now, just pull out individual rules into versioned functions where necessary. */ - static isNonStandard(tx: TransactionExtended): boolean { + static isNonStandard(tx: TransactionExtended, height?: number): boolean { // version - if (tx.version > TX_MAX_STANDARD_VERSION) { + if (this.isNonStandardVersion(tx, height)) { return true; } @@ -250,6 +252,8 @@ export class Common { } } else if (['unknown', 'provably_unspendable', 'empty'].includes(vin.prevout?.scriptpubkey_type || '')) { return true; + } else if (this.isNonStandardAnchor(tx, height)) { + return true; } // TODO: bad-witness-nonstandard } @@ -335,6 +339,49 @@ export class Common { return false; } + // Individual versioned standardness rules + + static V3_STANDARDNESS_ACTIVATION_HEIGHT = { + 'testnet4': 42_000, + 'testnet': 2_900_000, + 'signet': 211_000, + '': 863_500, + }; + static isNonStandardVersion(tx: TransactionExtended, height?: number): boolean { + let TX_MAX_STANDARD_VERSION = 3; + if ( + height != null + && this.V3_STANDARDNESS_ACTIVATION_HEIGHT[config.MEMPOOL.NETWORK] + && height <= this.V3_STANDARDNESS_ACTIVATION_HEIGHT[config.MEMPOOL.NETWORK] + ) { + // V3 transactions were non-standard to spend before v28.x (scheduled for 2024/09/30 https://github.com/bitcoin/bitcoin/issues/29891) + TX_MAX_STANDARD_VERSION = 2; + } + + if (tx.version > TX_MAX_STANDARD_VERSION) { + return true; + } + return false; + } + + static ANCHOR_STANDARDNESS_ACTIVATION_HEIGHT = { + 'testnet4': 42_000, + 'testnet': 2_900_000, + 'signet': 211_000, + '': 863_500, + }; + static isNonStandardAnchor(tx: TransactionExtended, height?: number): boolean { + if ( + height != null + && this.ANCHOR_STANDARDNESS_ACTIVATION_HEIGHT[config.MEMPOOL.NETWORK] + && height <= this.ANCHOR_STANDARDNESS_ACTIVATION_HEIGHT[config.MEMPOOL.NETWORK] + ) { + // anchor outputs were non-standard to spend before v28.x (scheduled for 2024/09/30 https://github.com/bitcoin/bitcoin/issues/29891) + return true; + } + return false; + } + static getNonWitnessSize(tx: TransactionExtended): number { let weight = tx.weight; let hasWitness = false; @@ -415,7 +462,7 @@ export class Common { return flags; } - static getTransactionFlags(tx: TransactionExtended): number { + static getTransactionFlags(tx: TransactionExtended, height?: number): number { let flags = tx.flags ? BigInt(tx.flags) : 0n; // Update variable flags (CPFP, RBF) @@ -548,7 +595,7 @@ export class Common { if (hasFakePubkey) { flags |= TransactionFlags.fake_pubkey; } - + // fast but bad heuristic to detect possible coinjoins // (at least 5 inputs and 5 outputs, less than half of which are unique amounts, with no address reuse) const addressReuse = Object.keys(reusedOutputAddresses).reduce((acc, key) => Math.max(acc, (reusedInputAddresses[key] || 0) + (reusedOutputAddresses[key] || 0)), 0) > 1; @@ -564,17 +611,17 @@ export class Common { flags |= TransactionFlags.batch_payout; } - if (this.isNonStandard(tx)) { + if (this.isNonStandard(tx, height)) { flags |= TransactionFlags.nonstandard; } return Number(flags); } - static classifyTransaction(tx: TransactionExtended): TransactionClassified { + static classifyTransaction(tx: TransactionExtended, height?: number): TransactionClassified { let flags = 0; try { - flags = Common.getTransactionFlags(tx); + flags = Common.getTransactionFlags(tx, height); } catch (e) { logger.warn('Failed to add classification flags to transaction: ' + (e instanceof Error ? e.message : e)); } @@ -585,8 +632,8 @@ export class Common { }; } - static classifyTransactions(txs: TransactionExtended[]): TransactionClassified[] { - return txs.map(Common.classifyTransaction); + static classifyTransactions(txs: TransactionExtended[], height?: number): TransactionClassified[] { + return txs.map(tx => Common.classifyTransaction(tx, height)); } static stripTransaction(tx: TransactionExtended): TransactionStripped { diff --git a/backend/src/api/cpfp.ts b/backend/src/api/cpfp.ts index 5818eb1ea..9da11328b 100644 --- a/backend/src/api/cpfp.ts +++ b/backend/src/api/cpfp.ts @@ -6,7 +6,7 @@ import { Acceleration } from './acceleration/acceleration'; const CPFP_UPDATE_INTERVAL = 60_000; // update CPFP info at most once per 60s per transaction const MAX_CLUSTER_ITERATIONS = 100; -export function calculateFastBlockCpfp(height: number, transactions: TransactionExtended[], saveRelatives: boolean = false): CpfpSummary { +export function calculateFastBlockCpfp(height: number, transactions: MempoolTransactionExtended[], saveRelatives: boolean = false): CpfpSummary { const clusters: CpfpCluster[] = []; // list of all cpfp clusters in this block const clusterMap: { [txid: string]: CpfpCluster } = {}; // map transactions to their cpfp cluster let clusterTxs: TransactionExtended[] = []; // working list of elements of the current cluster @@ -93,6 +93,7 @@ export function calculateFastBlockCpfp(height: number, transactions: Transaction return { transactions, clusters, + version: 1, }; } @@ -159,6 +160,7 @@ export function calculateGoodBlockCpfp(height: number, transactions: MempoolTran return { transactions: transactions.map(tx => txMap[tx.txid]), clusters: clusterArray, + version: 2, }; } diff --git a/backend/src/api/database-migration.ts b/backend/src/api/database-migration.ts index 70ff2d5bb..6cb361ffd 100644 --- a/backend/src/api/database-migration.ts +++ b/backend/src/api/database-migration.ts @@ -7,7 +7,7 @@ import cpfpRepository from '../repositories/CpfpRepository'; import { RowDataPacket } from 'mysql2'; class DatabaseMigration { - private static currentVersion = 80; + private static currentVersion = 93; private queryTimeout = 3600_000; private statisticsAddedIndexed = false; private uniqueLogs: string[] = []; @@ -653,9 +653,11 @@ class DatabaseMigration { await this.$executeQuery('ALTER TABLE `prices` ADD `TRY` float DEFAULT "-1"'); await this.$executeQuery('ALTER TABLE `prices` ADD `ZAR` float DEFAULT "-1"'); - await this.$executeQuery('TRUNCATE hashrates'); - await this.$executeQuery('TRUNCATE difficulty_adjustments'); - await this.$executeQuery(`UPDATE state SET string = NULL WHERE name = 'pools_json_sha'`); + if (isBitcoin === true) { + await this.$executeQuery('TRUNCATE hashrates'); + await this.$executeQuery('TRUNCATE difficulty_adjustments'); + await this.$executeQuery(`UPDATE state SET string = NULL WHERE name = 'pools_json_sha'`); + } await this.updateToSchemaVersion(75); } @@ -691,6 +693,114 @@ class DatabaseMigration { await this.$executeQuery('ALTER TABLE `blocks` ADD coinbase_addresses JSON DEFAULT NULL'); await this.updateToSchemaVersion(80); } + + if (databaseSchemaVersion < 81 && isBitcoin === true) { + await this.$executeQuery('ALTER TABLE `blocks_audits` ADD version INT NOT NULL DEFAULT 0'); + await this.$executeQuery('ALTER TABLE `blocks_audits` ADD INDEX `version` (`version`)'); + await this.$executeQuery('ALTER TABLE `blocks_audits` ADD unseen_txs JSON DEFAULT "[]"'); + await this.updateToSchemaVersion(81); + } + + if (databaseSchemaVersion < 82 && isBitcoin === true && config.MEMPOOL.NETWORK === 'mainnet') { + await this.$fixBadV1AuditBlocks(); + await this.updateToSchemaVersion(82); + } + + if (databaseSchemaVersion < 83 && isBitcoin === true) { + await this.$executeQuery('ALTER TABLE `blocks` ADD first_seen datetime(6) DEFAULT NULL'); + await this.updateToSchemaVersion(83); + } + + // add new pools indexes + if (databaseSchemaVersion < 84 && isBitcoin === true) { + await this.$executeQuery(` + ALTER TABLE \`pools\` + ADD INDEX \`slug\` (\`slug\`), + ADD INDEX \`unique_id\` (\`unique_id\`) + `); + await this.updateToSchemaVersion(84); + } + + // lightning channels indexes + if (databaseSchemaVersion < 85 && isBitcoin === true) { + await this.$executeQuery(` + ALTER TABLE \`channels\` + ADD INDEX \`created\` (\`created\`), + ADD INDEX \`capacity\` (\`capacity\`), + ADD INDEX \`closing_reason\` (\`closing_reason\`), + ADD INDEX \`closing_resolved\` (\`closing_resolved\`) + `); + await this.updateToSchemaVersion(85); + } + + // lightning nodes indexes + if (databaseSchemaVersion < 86 && isBitcoin === true) { + await this.$executeQuery(` + ALTER TABLE \`nodes\` + ADD INDEX \`status\` (\`status\`), + ADD INDEX \`channels\` (\`channels\`), + ADD INDEX \`country_id\` (\`country_id\`), + ADD INDEX \`as_number\` (\`as_number\`), + ADD INDEX \`first_seen\` (\`first_seen\`) + `); + await this.updateToSchemaVersion(86); + } + + // lightning node sockets indexes + if (databaseSchemaVersion < 87 && isBitcoin === true) { + await this.$executeQuery('ALTER TABLE `nodes_sockets` ADD INDEX `type` (`type`)'); + await this.updateToSchemaVersion(87); + } + + // lightning stats indexes + if (databaseSchemaVersion < 88 && isBitcoin === true) { + await this.$executeQuery('ALTER TABLE `lightning_stats` ADD INDEX `added` (`added`)'); + await this.updateToSchemaVersion(88); + } + + // geo names indexes + if (databaseSchemaVersion < 89 && isBitcoin === true) { + await this.$executeQuery('ALTER TABLE `geo_names` ADD INDEX `names` (`names`)'); + await this.updateToSchemaVersion(89); + } + + // hashrates indexes + if (databaseSchemaVersion < 90 && isBitcoin === true) { + await this.$executeQuery('ALTER TABLE `hashrates` ADD INDEX `type` (`type`)'); + await this.updateToSchemaVersion(90); + } + + // block audits indexes + if (databaseSchemaVersion < 91 && isBitcoin === true) { + await this.$executeQuery('ALTER TABLE `blocks_audits` ADD INDEX `time` (`time`)'); + await this.updateToSchemaVersion(91); + } + + // elements_pegs indexes + if (databaseSchemaVersion < 92 && config.MEMPOOL.NETWORK === 'liquid') { + await this.$executeQuery(` + ALTER TABLE \`elements_pegs\` + ADD INDEX \`block\` (\`block\`), + ADD INDEX \`datetime\` (\`datetime\`), + ADD INDEX \`amount\` (\`amount\`), + ADD INDEX \`bitcoinaddress\` (\`bitcoinaddress\`), + ADD INDEX \`bitcointxid\` (\`bitcointxid\`) + `); + await this.updateToSchemaVersion(92); + } + + // federation_txos indexes + if (databaseSchemaVersion < 93 && config.MEMPOOL.NETWORK === 'liquid') { + await this.$executeQuery(` + ALTER TABLE \`federation_txos\` + ADD INDEX \`unspent\` (\`unspent\`), + ADD INDEX \`lastblockupdate\` (\`lastblockupdate\`), + ADD INDEX \`blocktime\` (\`blocktime\`), + ADD INDEX \`emergencyKey\` (\`emergencyKey\`), + ADD INDEX \`expiredAt\` (\`expiredAt\`) + `); + await this.updateToSchemaVersion(93); + } } /** @@ -1305,6 +1415,28 @@ class DatabaseMigration { logger.warn(`Failed to migrate cpfp transaction data`); } } + + private async $fixBadV1AuditBlocks(): Promise { + const badBlocks = [ + '000000000000000000011ad49227fc8c9ba0ca96ad2ebce41a862f9a244478dc', + '000000000000000000010ac1f68b3080153f2826ffddc87ceffdd68ed97d6960', + '000000000000000000024cbdafeb2660ae8bd2947d166e7fe15d1689e86b2cf7', + '00000000000000000002e1dbfbf6ae057f331992a058b822644b368034f87286', + '0000000000000000000019973b2778f08ad6d21e083302ff0833d17066921ebb', + ]; + + for (const hash of badBlocks) { + try { + await this.$executeQuery(` + UPDATE blocks_audits + SET prioritized_txs = '[]' + WHERE hash = '${hash}' + `, true); + } catch (e) { + continue; + } + } + } } export default new DatabaseMigration(); diff --git a/backend/src/api/disk-cache.ts b/backend/src/api/disk-cache.ts index 202f8f4cb..f2a1f2390 100644 --- a/backend/src/api/disk-cache.ts +++ b/backend/src/api/disk-cache.ts @@ -257,6 +257,7 @@ class DiskCache { trees: rbfData.rbf.trees, expiring: rbfData.rbf.expiring.map(([txid, value]) => ({ key: txid, value })), mempool: memPool.getMempool(), + spendMap: memPool.getSpendMap(), }); } } catch (e) { diff --git a/backend/src/api/explorer/channels.routes.ts b/backend/src/api/explorer/channels.routes.ts index 391bf628e..8b4c3e8c8 100644 --- a/backend/src/api/explorer/channels.routes.ts +++ b/backend/src/api/explorer/channels.routes.ts @@ -1,6 +1,7 @@ import config from '../../config'; import { Application, Request, Response } from 'express'; import channelsApi from './channels.api'; +import { handleError } from '../../utils/api'; class ChannelsRoutes { constructor() { } @@ -22,7 +23,7 @@ class ChannelsRoutes { const channels = await channelsApi.$searchChannelsById(req.params.search); res.json(channels); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -38,7 +39,7 @@ class ChannelsRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(channel); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -53,11 +54,11 @@ class ChannelsRoutes { const status: string = typeof req.query.status === 'string' ? req.query.status : ''; if (index < -1) { - res.status(400).send('Invalid index'); + handleError(req, res, 400, 'Invalid index'); return; } if (['open', 'active', 'closed'].includes(status) === false) { - res.status(400).send('Invalid status'); + handleError(req, res, 400, 'Invalid status'); return; } @@ -69,14 +70,14 @@ class ChannelsRoutes { res.header('X-Total-Count', channelsCount.toString()); res.json(channels); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async $getChannelsByTransactionIds(req: Request, res: Response): Promise { try { if (!Array.isArray(req.query.txId)) { - res.status(400).send('Not an array'); + handleError(req, res, 400, 'Not an array'); return; } const txIds: string[] = []; @@ -107,7 +108,7 @@ class ChannelsRoutes { res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -119,7 +120,7 @@ class ChannelsRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(channels); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -132,7 +133,7 @@ class ChannelsRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(channels); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } diff --git a/backend/src/api/explorer/general.routes.ts b/backend/src/api/explorer/general.routes.ts index 07620e84a..b4d0c635d 100644 --- a/backend/src/api/explorer/general.routes.ts +++ b/backend/src/api/explorer/general.routes.ts @@ -3,6 +3,8 @@ import { Application, Request, Response } from 'express'; import nodesApi from './nodes.api'; import channelsApi from './channels.api'; import statisticsApi from './statistics.api'; +import { handleError } from '../../utils/api'; + class GeneralLightningRoutes { constructor() { } @@ -27,7 +29,7 @@ class GeneralLightningRoutes { channels: channels, }); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -41,7 +43,7 @@ class GeneralLightningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(statistics); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -50,7 +52,7 @@ class GeneralLightningRoutes { const statistics = await statisticsApi.$getLatestStatistics(); res.json(statistics); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } } diff --git a/backend/src/api/explorer/nodes.routes.ts b/backend/src/api/explorer/nodes.routes.ts index 9d6373845..9ca2fd1c3 100644 --- a/backend/src/api/explorer/nodes.routes.ts +++ b/backend/src/api/explorer/nodes.routes.ts @@ -3,6 +3,7 @@ import { Application, Request, Response } from 'express'; import nodesApi from './nodes.api'; import DB from '../../database'; import { INodesRanking } from '../../mempool.interfaces'; +import { handleError } from '../../utils/api'; class NodesRoutes { constructor() { } @@ -31,7 +32,7 @@ class NodesRoutes { const nodes = await nodesApi.$searchNodeByPublicKeyOrAlias(req.params.search); res.json(nodes); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -181,13 +182,13 @@ class NodesRoutes { } } catch (e) {} } - + res.header('Pragma', 'public'); res.header('Cache-control', 'public'); res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(nodes); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -195,7 +196,7 @@ class NodesRoutes { try { const node = await nodesApi.$getNode(req.params.public_key); if (!node) { - res.status(404).send('Node not found'); + handleError(req, res, 404, 'Node not found'); return; } res.header('Pragma', 'public'); @@ -203,7 +204,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(node); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -215,7 +216,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(statistics); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -223,7 +224,7 @@ class NodesRoutes { try { const node = await nodesApi.$getFeeHistogram(req.params.public_key); if (!node) { - res.status(404).send('Node not found'); + handleError(req, res, 404, 'Node not found'); return; } res.header('Pragma', 'public'); @@ -231,7 +232,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(node); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -247,7 +248,7 @@ class NodesRoutes { topByChannels: topChannelsNodes, }); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -259,7 +260,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(topCapacityNodes); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -271,7 +272,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(topCapacityNodes); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -283,7 +284,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(topCapacityNodes); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -295,7 +296,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 600).toUTCString()); res.json(nodesPerAs); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -307,7 +308,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 600).toUTCString()); res.json(worldNodes); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -322,7 +323,7 @@ class NodesRoutes { ); if (country.length === 0) { - res.status(404).send(`This country does not exist or does not host any lightning nodes on clearnet`); + handleError(req, res, 404, `This country does not exist or does not host any lightning nodes on clearnet`); return; } @@ -335,7 +336,7 @@ class NodesRoutes { nodes: nodes, }); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -349,7 +350,7 @@ class NodesRoutes { ); if (isp.length === 0) { - res.status(404).send(`This ISP does not exist or does not host any lightning nodes on clearnet`); + handleError(req, res, 404, `This ISP does not exist or does not host any lightning nodes on clearnet`); return; } @@ -362,7 +363,7 @@ class NodesRoutes { nodes: nodes, }); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -374,7 +375,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 600).toUTCString()); res.json(nodesPerAs); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } } diff --git a/backend/src/api/liquid/liquid.routes.ts b/backend/src/api/liquid/liquid.routes.ts index 9ea61ca31..9dafd0def 100644 --- a/backend/src/api/liquid/liquid.routes.ts +++ b/backend/src/api/liquid/liquid.routes.ts @@ -3,6 +3,7 @@ import { Application, Request, Response } from 'express'; import config from '../../config'; import elementsParser from './elements-parser'; import icons from './icons'; +import { handleError } from '../../utils/api'; class LiquidRoutes { public initRoutes(app: Application) { @@ -42,7 +43,7 @@ class LiquidRoutes { res.setHeader('content-length', result.length); res.send(result); } else { - res.status(404).send('Asset icon not found'); + handleError(req, res, 404, 'Asset icon not found'); } } @@ -51,7 +52,7 @@ class LiquidRoutes { if (result) { res.json(result); } else { - res.status(404).send('Asset icons not found'); + handleError(req, res, 404, 'Asset icons not found'); } } @@ -82,7 +83,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60 * 60).toUTCString()); res.json(pegs); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -94,7 +95,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60 * 60).toUTCString()); res.json(reserves); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -106,7 +107,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(currentSupply); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -118,7 +119,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(currentReserves); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -130,7 +131,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(auditStatus); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -142,7 +143,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(federationAddresses); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -154,7 +155,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(federationAddresses); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -166,7 +167,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(federationUtxos); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -178,7 +179,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(expiredUtxos); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -190,7 +191,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(federationUtxos); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -202,7 +203,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(emergencySpentUtxos); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -214,7 +215,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(emergencySpentUtxos); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -226,7 +227,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(recentPegs); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -238,7 +239,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(pegsVolume); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -250,7 +251,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(pegsCount); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } diff --git a/backend/src/api/mempool-blocks.ts b/backend/src/api/mempool-blocks.ts index e655601e5..ba4ce2ed0 100644 --- a/backend/src/api/mempool-blocks.ts +++ b/backend/src/api/mempool-blocks.ts @@ -369,7 +369,7 @@ class MempoolBlocks { const lastBlockIndex = blocks.length - 1; let hasBlockStack = blocks.length >= 8; let stackWeight; - let feeStatsCalculator: OnlineFeeStatsCalculator | void; + let feeStatsCalculator: OnlineFeeStatsCalculator | null = null; if (hasBlockStack) { if (blockWeights && blockWeights[7] !== null) { stackWeight = blockWeights[7]; @@ -380,28 +380,36 @@ class MempoolBlocks { feeStatsCalculator = new OnlineFeeStatsCalculator(stackWeight, 0.5, [10, 20, 30, 40, 50, 60, 70, 80, 90]); } + const ancestors: Ancestor[] = []; + const descendants: Ancestor[] = []; + let ancestor: MempoolTransactionExtended; for (const cluster of clusters) { for (const memberTxid of cluster) { const mempoolTx = mempool[memberTxid]; if (mempoolTx) { - const ancestors: Ancestor[] = []; - const descendants: Ancestor[] = []; + // ugly micro-optimization to avoid allocating new arrays + ancestors.length = 0; + descendants.length = 0; let matched = false; cluster.forEach(txid => { + ancestor = mempool[txid]; if (txid === memberTxid) { matched = true; } else { - if (!mempool[txid]) { + if (!ancestor) { console.log('txid missing from mempool! ', txid, candidates?.txs[txid]); + return; } const relative = { txid: txid, - fee: mempool[txid].fee, - weight: (mempool[txid].adjustedVsize * 4), + fee: ancestor.fee, + weight: (ancestor.adjustedVsize * 4), }; if (matched) { descendants.push(relative); - mempoolTx.lastBoosted = Math.max(mempoolTx.lastBoosted || 0, mempool[txid].firstSeen || 0); + if (!mempoolTx.lastBoosted || (ancestor.firstSeen && ancestor.firstSeen > mempoolTx.lastBoosted)) { + mempoolTx.lastBoosted = ancestor.firstSeen; + } } else { ancestors.push(relative); } @@ -410,7 +418,20 @@ class MempoolBlocks { if (mempoolTx.ancestors?.length !== ancestors.length || mempoolTx.descendants?.length !== descendants.length) { mempoolTx.cpfpDirty = true; } - Object.assign(mempoolTx, {ancestors, descendants, bestDescendant: null, cpfpChecked: true}); + // ugly micro-optimization to avoid allocating new arrays or objects + if (mempoolTx.ancestors) { + mempoolTx.ancestors.length = 0; + } else { + mempoolTx.ancestors = []; + } + if (mempoolTx.descendants) { + mempoolTx.descendants.length = 0; + } else { + mempoolTx.descendants = []; + } + mempoolTx.ancestors.push(...ancestors); + mempoolTx.descendants.push(...descendants); + mempoolTx.cpfpChecked = true; } } } @@ -420,7 +441,10 @@ class MempoolBlocks { const sizeLimit = (config.MEMPOOL.BLOCK_WEIGHT_UNITS / 4) * 1.2; // update this thread's mempool with the results let mempoolTx: MempoolTransactionExtended; - const mempoolBlocks: MempoolBlockWithTransactions[] = blocks.map((block, blockIndex) => { + let acceleration: Acceleration; + const mempoolBlocks: MempoolBlockWithTransactions[] = []; + for (let blockIndex = 0; blockIndex < blocks.length; blockIndex++) { + const block = blocks[blockIndex]; let totalSize = 0; let totalVsize = 0; let totalWeight = 0; @@ -436,8 +460,9 @@ class MempoolBlocks { } } - for (const txid of block) { - if (txid) { + for (let i = 0; i < block.length; i++) { + const txid = block[i]; + if (txid in mempool) { mempoolTx = mempool[txid]; // save position in projected blocks mempoolTx.position = { @@ -445,28 +470,40 @@ class MempoolBlocks { vsize: totalVsize + (mempoolTx.vsize / 2), }; - const acceleration = accelerations[txid]; - if (isAcceleratedBy[txid] || (acceleration && (!accelerationPool || acceleration.pools.includes(accelerationPool)))) { - if (!mempoolTx.acceleration) { - mempoolTx.cpfpDirty = true; - } - mempoolTx.acceleration = true; - mempoolTx.acceleratedBy = isAcceleratedBy[txid] || acceleration?.pools; - mempoolTx.acceleratedAt = acceleration?.added; - for (const ancestor of mempoolTx.ancestors || []) { - if (!mempool[ancestor.txid].acceleration) { - mempool[ancestor.txid].cpfpDirty = true; + if (txid in accelerations) { + acceleration = accelerations[txid]; + if (isAcceleratedBy[txid] || (acceleration && (!accelerationPool || acceleration.pools.includes(accelerationPool)))) { + if (!mempoolTx.acceleration) { + mempoolTx.cpfpDirty = true; + } + mempoolTx.acceleration = true; + mempoolTx.acceleratedBy = isAcceleratedBy[txid] || acceleration?.pools; + mempoolTx.acceleratedAt = acceleration?.added; + mempoolTx.feeDelta = acceleration?.feeDelta; + for (const ancestor of mempoolTx.ancestors || []) { + if (!(ancestor.txid in mempool)) { + continue; + } + if (!mempool[ancestor.txid].acceleration) { + mempool[ancestor.txid].cpfpDirty = true; + } + mempool[ancestor.txid].acceleration = true; + mempool[ancestor.txid].acceleratedBy = mempoolTx.acceleratedBy; + mempool[ancestor.txid].acceleratedAt = mempoolTx.acceleratedAt; + mempool[ancestor.txid].feeDelta = mempoolTx.feeDelta; + isAcceleratedBy[ancestor.txid] = mempoolTx.acceleratedBy; + } + } else { + if (mempoolTx.acceleration) { + mempoolTx.cpfpDirty = true; + delete mempoolTx.acceleration; } - mempool[ancestor.txid].acceleration = true; - mempool[ancestor.txid].acceleratedBy = mempoolTx.acceleratedBy; - mempool[ancestor.txid].acceleratedAt = mempoolTx.acceleratedAt; - isAcceleratedBy[ancestor.txid] = mempoolTx.acceleratedBy; } } else { if (mempoolTx.acceleration) { mempoolTx.cpfpDirty = true; + delete mempoolTx.acceleration; } - delete mempoolTx.acceleration; } // online calculation of stack-of-blocks fee stats @@ -484,7 +521,7 @@ class MempoolBlocks { } } } - return this.dataToMempoolBlocks( + mempoolBlocks[blockIndex] = this.dataToMempoolBlocks( block, transactions, totalSize, @@ -492,7 +529,7 @@ class MempoolBlocks { totalFees, (hasBlockStack && blockIndex === lastBlockIndex && feeStatsCalculator) ? feeStatsCalculator.getRawFeeStats() : undefined, ); - }); + }; if (saveResults) { const deltas = this.calculateMempoolDeltas(this.mempoolBlocks, mempoolBlocks); @@ -654,7 +691,7 @@ class MempoolBlocks { [pool: string]: { name: string, block: number, vsize: number, accelerations: string[], complete: boolean }; } = {}; // prepare a list of accelerations in ascending order (we'll pop items off the end of the list) - const accQueue: { acceleration: Acceleration, rate: number, vsize: number }[] = Object.values(accelerations).map(acc => { + const accQueue: { acceleration: Acceleration, rate: number, vsize: number }[] = Object.values(accelerations).filter(acc => acc.txid in mempoolCache).map(acc => { let vsize = mempoolCache[acc.txid].vsize; for (const ancestor of mempoolCache[acc.txid].ancestors || []) { vsize += (ancestor.weight / 4); diff --git a/backend/src/api/mempool.ts b/backend/src/api/mempool.ts index 1f55179fb..87e7f10cd 100644 --- a/backend/src/api/mempool.ts +++ b/backend/src/api/mempool.ts @@ -10,6 +10,7 @@ import bitcoinClient from './bitcoin/bitcoin-client'; import bitcoinSecondClient from './bitcoin/bitcoin-second-client'; import rbfCache from './rbf-cache'; import { Acceleration } from './services/acceleration'; +import accelerationApi from './services/acceleration'; import redisCache from './redis-cache'; import blocks from './blocks'; @@ -19,12 +20,13 @@ class Mempool { private mempoolCache: { [txId: string]: MempoolTransactionExtended } = {}; private mempoolCandidates: { [txid: string ]: boolean } = {}; private spendMap = new Map(); + private recentlyDeleted: MempoolTransactionExtended[][] = []; // buffer of transactions deleted in recent mempool updates private mempoolInfo: IBitcoinApi.MempoolInfo = { loaded: false, size: 0, bytes: 0, usage: 0, total_fee: 0, maxmempool: 300000000, mempoolminfee: Common.isLiquid() ? 0.00000100 : 0.00001000, minrelaytxfee: Common.isLiquid() ? 0.00000100 : 0.00001000 }; private mempoolChangedCallback: ((newMempool: {[txId: string]: MempoolTransactionExtended; }, newTransactions: MempoolTransactionExtended[], - deletedTransactions: MempoolTransactionExtended[], accelerationDelta: string[]) => void) | undefined; + deletedTransactions: MempoolTransactionExtended[][], accelerationDelta: string[]) => void) | undefined; private $asyncMempoolChangedCallback: ((newMempool: {[txId: string]: MempoolTransactionExtended; }, mempoolSize: number, newTransactions: MempoolTransactionExtended[], - deletedTransactions: MempoolTransactionExtended[], accelerationDelta: string[], candidates?: GbtCandidates) => Promise) | undefined; + deletedTransactions: MempoolTransactionExtended[][], accelerationDelta: string[], candidates?: GbtCandidates) => Promise) | undefined; private accelerations: { [txId: string]: Acceleration } = {}; private accelerationPositions: { [txid: string]: { poolId: number, pool: string, block: number, vsize: number }[] } = {}; @@ -74,12 +76,12 @@ class Mempool { } public setMempoolChangedCallback(fn: (newMempool: { [txId: string]: MempoolTransactionExtended; }, - newTransactions: MempoolTransactionExtended[], deletedTransactions: MempoolTransactionExtended[], accelerationDelta: string[]) => void): void { + newTransactions: MempoolTransactionExtended[], deletedTransactions: MempoolTransactionExtended[][], accelerationDelta: string[]) => void): void { this.mempoolChangedCallback = fn; } public setAsyncMempoolChangedCallback(fn: (newMempool: { [txId: string]: MempoolTransactionExtended; }, mempoolSize: number, - newTransactions: MempoolTransactionExtended[], deletedTransactions: MempoolTransactionExtended[], accelerationDelta: string[], + newTransactions: MempoolTransactionExtended[], deletedTransactions: MempoolTransactionExtended[][], accelerationDelta: string[], candidates?: GbtCandidates) => Promise): void { this.$asyncMempoolChangedCallback = fn; } @@ -206,7 +208,7 @@ class Mempool { return txTimes; } - public async $updateMempool(transactions: string[], accelerations: Acceleration[] | null, minFeeMempool: string[], minFeeTip: number, pollRate: number): Promise { + public async $updateMempool(transactions: string[], accelerations: Record | null, minFeeMempool: string[], minFeeTip: number, pollRate: number): Promise { logger.debug(`Updating mempool...`); // warn if this run stalls the main loop for more than 2 minutes @@ -353,7 +355,7 @@ class Mempool { const newTransactionsStripped = newTransactions.map((tx) => Common.stripTransaction(tx)); this.latestTransactions = newTransactionsStripped.concat(this.latestTransactions).slice(0, 6); - const accelerationDelta = accelerations != null ? await this.$updateAccelerations(accelerations) : []; + const accelerationDelta = accelerations != null ? await this.updateAccelerations(accelerations) : []; if (accelerationDelta.length) { hasChange = true; } @@ -362,12 +364,15 @@ class Mempool { const candidatesChanged = candidates?.added?.length || candidates?.removed?.length; - if (this.mempoolChangedCallback && (hasChange || deletedTransactions.length)) { - this.mempoolChangedCallback(this.mempoolCache, newTransactions, deletedTransactions, accelerationDelta); + this.recentlyDeleted.unshift(deletedTransactions); + this.recentlyDeleted.length = Math.min(this.recentlyDeleted.length, 10); // truncate to the last 10 mempool updates + + if (this.mempoolChangedCallback && (hasChange || newTransactions.length || deletedTransactions.length)) { + this.mempoolChangedCallback(this.mempoolCache, newTransactions, this.recentlyDeleted, accelerationDelta); } - if (this.$asyncMempoolChangedCallback && (hasChange || deletedTransactions.length || candidatesChanged)) { + if (this.$asyncMempoolChangedCallback && (hasChange || newTransactions.length || deletedTransactions.length || candidatesChanged)) { this.updateTimerProgress(timer, 'running async mempool callback'); - await this.$asyncMempoolChangedCallback(this.mempoolCache, newMempoolSize, newTransactions, deletedTransactions, accelerationDelta, candidates); + await this.$asyncMempoolChangedCallback(this.mempoolCache, newMempoolSize, newTransactions, this.recentlyDeleted, accelerationDelta, candidates); this.updateTimerProgress(timer, 'completed async mempool callback'); } @@ -395,58 +400,11 @@ class Mempool { return this.accelerations; } - public $updateAccelerations(newAccelerations: Acceleration[]): string[] { + public updateAccelerations(newAccelerationMap: Record): string[] { try { - const changed: string[] = []; - - const newAccelerationMap: { [txid: string]: Acceleration } = {}; - for (const acceleration of newAccelerations) { - // skip transactions we don't know about - if (!this.mempoolCache[acceleration.txid]) { - continue; - } - newAccelerationMap[acceleration.txid] = acceleration; - if (this.accelerations[acceleration.txid] == null) { - // new acceleration - changed.push(acceleration.txid); - } else { - if (this.accelerations[acceleration.txid].feeDelta !== acceleration.feeDelta) { - // feeDelta changed - changed.push(acceleration.txid); - } else if (this.accelerations[acceleration.txid].pools?.length) { - let poolsChanged = false; - const pools = new Set(); - this.accelerations[acceleration.txid].pools.forEach(pool => { - pools.add(pool); - }); - acceleration.pools.forEach(pool => { - if (!pools.has(pool)) { - poolsChanged = true; - } else { - pools.delete(pool); - } - }); - if (pools.size > 0) { - poolsChanged = true; - } - if (poolsChanged) { - // pools changed - changed.push(acceleration.txid); - } - } - } - } - - for (const oldTxid of Object.keys(this.accelerations)) { - if (!newAccelerationMap[oldTxid]) { - // removed - changed.push(oldTxid); - } - } - + const accelerationDelta = accelerationApi.getAccelerationDelta(this.accelerations, newAccelerationMap); this.accelerations = newAccelerationMap; - - return changed; + return accelerationDelta; } catch (e: any) { logger.debug(`Failed to update accelerations: ` + (e instanceof Error ? e.message : e)); return []; @@ -541,16 +499,7 @@ class Mempool { } } - public handleRbfTransactions(rbfTransactions: { [txid: string]: MempoolTransactionExtended[]; }): void { - for (const rbfTransaction in rbfTransactions) { - if (this.mempoolCache[rbfTransaction] && rbfTransactions[rbfTransaction]?.length) { - // Store replaced transactions - rbfCache.add(rbfTransactions[rbfTransaction], this.mempoolCache[rbfTransaction]); - } - } - } - - public handleMinedRbfTransactions(rbfTransactions: { [txid: string]: { replaced: MempoolTransactionExtended[], replacedBy: TransactionExtended }}): void { + public handleRbfTransactions(rbfTransactions: { [txid: string]: { replaced: MempoolTransactionExtended[], replacedBy: TransactionExtended }}): void { for (const rbfTransaction in rbfTransactions) { if (rbfTransactions[rbfTransaction].replacedBy && rbfTransactions[rbfTransaction]?.replaced?.length) { // Store replaced transactions diff --git a/backend/src/api/mini-miner.ts b/backend/src/api/mini-miner.ts index 4a4ef5daa..0bef1a819 100644 --- a/backend/src/api/mini-miner.ts +++ b/backend/src/api/mini-miner.ts @@ -337,7 +337,7 @@ export function makeBlockTemplate(candidates: MempoolTransactionExtended[], acce let failures = 0; while (mempoolArray.length || modified.length) { // skip invalid transactions - while (mempoolArray[0].used || mempoolArray[0].modified) { + while (mempoolArray[0]?.used || mempoolArray[0]?.modified) { mempoolArray.shift(); } diff --git a/backend/src/api/mining/mining-routes.ts b/backend/src/api/mining/mining-routes.ts index 08ea0d1bc..9af43c087 100644 --- a/backend/src/api/mining/mining-routes.ts +++ b/backend/src/api/mining/mining-routes.ts @@ -10,6 +10,7 @@ import mining from "./mining"; import PricesRepository from '../../repositories/PricesRepository'; import AccelerationRepository from '../../repositories/AccelerationRepository'; import accelerationApi from '../services/acceleration'; +import { handleError } from '../../utils/api'; class MiningRoutes { public initRoutes(app: Application) { @@ -53,12 +54,12 @@ class MiningRoutes { res.header('Cache-control', 'public'); res.setHeader('Expires', new Date(Date.now() + 1000 * 300).toUTCString()); if (['testnet', 'signet', 'liquidtestnet'].includes(config.MEMPOOL.NETWORK)) { - res.status(400).send('Prices are not available on testnets.'); + handleError(req, res, 400, 'Prices are not available on testnets.'); return; } const timestamp = parseInt(req.query.timestamp as string, 10) || 0; const currency = req.query.currency as string; - + let response; if (timestamp && currency) { response = await PricesRepository.$getNearestHistoricalPrice(timestamp, currency); @@ -71,7 +72,7 @@ class MiningRoutes { } res.status(200).send(response); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -84,9 +85,9 @@ class MiningRoutes { res.json(stats); } catch (e) { if (e instanceof Error && e.message.indexOf('This mining pool does not exist') > -1) { - res.status(404).send(e.message); + handleError(req, res, 404, e.message); } else { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } } @@ -103,9 +104,9 @@ class MiningRoutes { res.json(poolBlocks); } catch (e) { if (e instanceof Error && e.message.indexOf('This mining pool does not exist') > -1) { - res.status(404).send(e.message); + handleError(req, res, 404, e.message); } else { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } } @@ -129,7 +130,7 @@ class MiningRoutes { res.json(pools); } } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -143,7 +144,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(stats); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -157,7 +158,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 300).toUTCString()); res.json(hashrates); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -172,9 +173,9 @@ class MiningRoutes { res.json(hashrates); } catch (e) { if (e instanceof Error && e.message.indexOf('This mining pool does not exist') > -1) { - res.status(404).send(e.message); + handleError(req, res, 404, e.message); } else { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } } @@ -182,7 +183,7 @@ class MiningRoutes { private async $getHistoricalHashrate(req: Request, res: Response) { let currentHashrate = 0, currentDifficulty = 0; try { - currentHashrate = await bitcoinClient.getNetworkHashPs(); + currentHashrate = await bitcoinClient.getNetworkHashPs(1008); currentDifficulty = await bitcoinClient.getDifficulty(); } catch (e) { logger.debug('Bitcoin Core is not available, using zeroed value for current hashrate and difficulty'); @@ -203,7 +204,7 @@ class MiningRoutes { currentDifficulty: currentDifficulty, }); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -217,7 +218,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(blockFees); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -235,7 +236,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(blockFees); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -249,7 +250,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(blockRewards); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -263,7 +264,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(blockFeeRates); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -281,7 +282,7 @@ class MiningRoutes { weights: blockWeights }); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -293,7 +294,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 300).toUTCString()); res.json(difficulty.map(adj => [adj.time, adj.height, adj.difficulty, adj.adjustment])); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -317,7 +318,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(blocksHealth.map(health => [health.time, health.height, health.match_rate])); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -326,7 +327,7 @@ class MiningRoutes { const audit = await BlocksAuditsRepository.$getBlockAudit(req.params.hash); if (!audit) { - res.status(204).send(`This block has not been audited.`); + handleError(req, res, 204, `This block has not been audited.`); return; } @@ -335,7 +336,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 3600 * 24).toUTCString()); res.json(audit); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -358,7 +359,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 300).toUTCString()); res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -371,7 +372,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(await BlocksAuditsRepository.$getBlockAuditScores(height, height - 15)); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -384,7 +385,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 3600 * 24).toUTCString()); res.json(audit || 'null'); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -394,12 +395,12 @@ class MiningRoutes { res.header('Cache-control', 'public'); res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); if (!config.MEMPOOL_SERVICES.ACCELERATIONS || ['testnet', 'signet', 'liquidtestnet', 'liquid'].includes(config.MEMPOOL.NETWORK)) { - res.status(400).send('Acceleration data is not available.'); + handleError(req, res, 400, 'Acceleration data is not available.'); return; } res.status(200).send(await AccelerationRepository.$getAccelerationInfo(req.params.slug)); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -409,13 +410,13 @@ class MiningRoutes { res.header('Cache-control', 'public'); res.setHeader('Expires', new Date(Date.now() + 1000 * 3600 * 24).toUTCString()); if (!config.MEMPOOL_SERVICES.ACCELERATIONS || ['testnet', 'signet', 'liquidtestnet', 'liquid'].includes(config.MEMPOOL.NETWORK)) { - res.status(400).send('Acceleration data is not available.'); + handleError(req, res, 400, 'Acceleration data is not available.'); return; } const height = req.params.height === undefined ? undefined : parseInt(req.params.height, 10); res.status(200).send(await AccelerationRepository.$getAccelerationInfo(null, height)); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -425,12 +426,12 @@ class MiningRoutes { res.header('Cache-control', 'public'); res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); if (!config.MEMPOOL_SERVICES.ACCELERATIONS || ['testnet', 'signet', 'liquidtestnet', 'liquid'].includes(config.MEMPOOL.NETWORK)) { - res.status(400).send('Acceleration data is not available.'); + handleError(req, res, 400, 'Acceleration data is not available.'); return; } res.status(200).send(await AccelerationRepository.$getAccelerationInfo(null, null, req.params.interval)); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -440,12 +441,12 @@ class MiningRoutes { res.header('Cache-control', 'public'); res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); if (!config.MEMPOOL_SERVICES.ACCELERATIONS || ['testnet', 'signet', 'liquidtestnet', 'liquid'].includes(config.MEMPOOL.NETWORK)) { - res.status(400).send('Acceleration data is not available.'); + handleError(req, res, 400, 'Acceleration data is not available.'); return; } res.status(200).send(await AccelerationRepository.$getAccelerationTotals(req.query.pool, req.query.interval)); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -455,28 +456,24 @@ class MiningRoutes { res.header('Cache-control', 'public'); res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); if (!config.MEMPOOL_SERVICES.ACCELERATIONS || ['testnet', 'signet', 'liquidtestnet', 'liquid'].includes(config.MEMPOOL.NETWORK)) { - res.status(400).send('Acceleration data is not available.'); + handleError(req, res, 400, 'Acceleration data is not available.'); return; } - res.status(200).send(accelerationApi.accelerations || []); + res.status(200).send(Object.values(accelerationApi.getAccelerations() || {})); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async $requestAcceleration(req: Request, res: Response): Promise { - if (config.MEMPOOL_SERVICES.ACCELERATIONS || config.MEMPOOL.OFFICIAL) { - res.status(405).send('not available.'); - return; - } res.setHeader('Pragma', 'no-cache'); res.setHeader('Cache-control', 'private, no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'); res.setHeader('expires', -1); try { accelerationApi.accelerationRequested(req.params.txid); - res.status(200).send('ok'); + res.status(200).send(); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } } diff --git a/backend/src/api/mining/mining.ts b/backend/src/api/mining/mining.ts index 21ee4b35a..7e3ec525a 100644 --- a/backend/src/api/mining/mining.ts +++ b/backend/src/api/mining/mining.ts @@ -136,9 +136,13 @@ class Mining { poolsStatistics['blockCount'] = blockCount; const totalBlock24h: number = await BlocksRepository.$blockCount(null, '24h'); + const totalBlock3d: number = await BlocksRepository.$blockCount(null, '3d'); + const totalBlock1w: number = await BlocksRepository.$blockCount(null, '1w'); try { poolsStatistics['lastEstimatedHashrate'] = await bitcoinClient.getNetworkHashPs(totalBlock24h); + poolsStatistics['lastEstimatedHashrate3d'] = await bitcoinClient.getNetworkHashPs(totalBlock3d); + poolsStatistics['lastEstimatedHashrate1w'] = await bitcoinClient.getNetworkHashPs(totalBlock1w); } catch (e) { poolsStatistics['lastEstimatedHashrate'] = 0; logger.debug('Bitcoin Core is not available, using zeroed value for current hashrate', logger.tags.mining); diff --git a/backend/src/api/prices/prices.routes.ts b/backend/src/api/prices/prices.routes.ts index b46331b73..e395fb44b 100644 --- a/backend/src/api/prices/prices.routes.ts +++ b/backend/src/api/prices/prices.routes.ts @@ -1,10 +1,15 @@ import { Application, Request, Response } from 'express'; import config from '../../config'; import pricesUpdater from '../../tasks/price-updater'; +import logger from '../../logger'; +import PricesRepository from '../../repositories/PricesRepository'; class PricesRoutes { public initRoutes(app: Application): void { - app.get(config.MEMPOOL.API_URL_PREFIX + 'prices', this.$getCurrentPrices.bind(this)); + app + .get(config.MEMPOOL.API_URL_PREFIX + 'prices', this.$getCurrentPrices.bind(this)) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/usd-price-history', this.$getAllPrices.bind(this)) + ; } private $getCurrentPrices(req: Request, res: Response): void { @@ -14,6 +19,23 @@ class PricesRoutes { res.json(pricesUpdater.getLatestPrices()); } + + private async $getAllPrices(req: Request, res: Response): Promise { + res.header('Pragma', 'public'); + res.header('Cache-control', 'public'); + res.setHeader('Expires', new Date(Date.now() + 360_0000 / config.MEMPOOL.PRICE_UPDATES_PER_HOUR).toUTCString()); + + try { + const usdPriceHistory = await PricesRepository.$getPricesTimesAndId(); + const responseData = usdPriceHistory.map(p => { + return { time: p.time, USD: p.USD }; + }); + res.status(200).json(responseData); + } catch (e: any) { + logger.err(`Exception ${e} in PricesRoutes::$getAllPrices. Code: ${e.code}. Message: ${e.message}`); + res.status(403).send(); + } + } } export default new PricesRoutes(); diff --git a/backend/src/api/rbf-cache.ts b/backend/src/api/rbf-cache.ts index a087abbe0..944ad790e 100644 --- a/backend/src/api/rbf-cache.ts +++ b/backend/src/api/rbf-cache.ts @@ -44,6 +44,22 @@ interface CacheEvent { value?: any, } +/** + * Singleton for tracking RBF trees + * + * Maintains a set of RBF trees, where each tree represents a sequence of + * consecutive RBF replacements. + * + * Trees are identified by the txid of the root transaction. + * + * To maintain consistency, the following invariants must be upheld: + * - Symmetry: replacedBy(A) = B <=> A in replaces(B) + * - Unique id: treeMap(treeMap(X)) = treeMap(X) + * - Unique tree: A in replaces(B) => treeMap(A) == treeMap(B) + * - Existence: X in treeMap => treeMap(X) in rbfTrees + * - Completeness: X in replacedBy => X in treeMap, Y in replaces => Y in treeMap + */ + class RbfCache { private replacedBy: Map = new Map(); private replaces: Map = new Map(); @@ -61,6 +77,10 @@ class RbfCache { setInterval(this.cleanup.bind(this), 1000 * 60 * 10); } + /** + * Low level cache operations + */ + private addTx(txid: string, tx: MempoolTransactionExtended): void { this.txs.set(txid, tx); this.cacheQueue.push({ op: CacheOp.Add, type: 'tx', txid }); @@ -92,6 +112,12 @@ class RbfCache { this.cacheQueue.push({ op: CacheOp.Remove, type: 'exp', txid }); } + /** + * Basic data structure operations + * must uphold tree invariants + */ + + public add(replaced: MempoolTransactionExtended[], newTxExtended: MempoolTransactionExtended): void { if (!newTxExtended || !replaced?.length || this.txs.has(newTxExtended.txid)) { return; @@ -114,6 +140,10 @@ class RbfCache { if (!replacedTx.rbf) { txFullRbf = true; } + if (this.replacedBy.has(replacedTx.txid)) { + // should never happen + continue; + } this.replacedBy.set(replacedTx.txid, newTx.txid); if (this.treeMap.has(replacedTx.txid)) { const treeId = this.treeMap.get(replacedTx.txid); @@ -140,18 +170,47 @@ class RbfCache { } } newTx.fullRbf = txFullRbf; - const treeId = replacedTrees[0].tx.txid; const newTree = { tx: newTx, time: newTime, fullRbf: treeFullRbf, replaces: replacedTrees }; - this.addTree(treeId, newTree); - this.updateTreeMap(treeId, newTree); + this.addTree(newTree.tx.txid, newTree); + this.updateTreeMap(newTree.tx.txid, newTree); this.replaces.set(newTx.txid, replacedTrees.map(tree => tree.tx.txid)); } + public mined(txid): void { + if (!this.txs.has(txid)) { + return; + } + const treeId = this.treeMap.get(txid); + if (treeId && this.rbfTrees.has(treeId)) { + const tree = this.rbfTrees.get(treeId); + if (tree) { + this.setTreeMined(tree, txid); + tree.mined = true; + this.dirtyTrees.add(treeId); + this.cacheQueue.push({ op: CacheOp.Change, type: 'tree', txid: treeId }); + } + } + this.evict(txid); + } + + // flag a transaction as removed from the mempool + public evict(txid: string, fast: boolean = false): void { + this.evictionCount++; + if (this.txs.has(txid) && (fast || !this.expiring.has(txid))) { + const expiryTime = fast ? Date.now() + (1000 * 60 * 10) : Date.now() + (1000 * 86400); // 24 hours + this.addExpiration(txid, expiryTime); + } + } + + /** + * Read-only public interface + */ + public has(txId: string): boolean { return this.txs.has(txId); } @@ -232,32 +291,6 @@ class RbfCache { return changes; } - public mined(txid): void { - if (!this.txs.has(txid)) { - return; - } - const treeId = this.treeMap.get(txid); - if (treeId && this.rbfTrees.has(treeId)) { - const tree = this.rbfTrees.get(treeId); - if (tree) { - this.setTreeMined(tree, txid); - tree.mined = true; - this.dirtyTrees.add(treeId); - this.cacheQueue.push({ op: CacheOp.Change, type: 'tree', txid: treeId }); - } - } - this.evict(txid); - } - - // flag a transaction as removed from the mempool - public evict(txid: string, fast: boolean = false): void { - this.evictionCount++; - if (this.txs.has(txid) && (fast || !this.expiring.has(txid))) { - const expiryTime = fast ? Date.now() + (1000 * 60 * 10) : Date.now() + (1000 * 86400); // 24 hours - this.addExpiration(txid, expiryTime); - } - } - // is the transaction involved in a full rbf replacement? public isFullRbf(txid: string): boolean { const treeId = this.treeMap.get(txid); @@ -271,6 +304,10 @@ class RbfCache { return tree?.fullRbf; } + /** + * Cache maintenance & utility functions + */ + private cleanup(): void { const now = Date.now(); for (const txid of this.expiring.keys()) { @@ -299,10 +336,6 @@ class RbfCache { for (const tx of (replaces || [])) { // recursively remove prior versions from the cache this.replacedBy.delete(tx); - // if this is the id of a tree, remove that too - if (this.treeMap.get(tx) === tx) { - this.removeTree(tx); - } this.remove(tx); } } @@ -370,14 +403,21 @@ class RbfCache { }; } - public async load({ txs, trees, expiring, mempool }): Promise { + public async load({ txs, trees, expiring, mempool, spendMap }): Promise { try { txs.forEach(txEntry => { this.txs.set(txEntry.value.txid, txEntry.value); }); this.staleCount = 0; - for (const deflatedTree of trees) { - await this.importTree(mempool, deflatedTree.root, deflatedTree.root, deflatedTree, this.txs); + for (const deflatedTree of trees.sort((a, b) => Object.keys(b).length - Object.keys(a).length)) { + const tree = await this.importTree(mempool, deflatedTree.root, deflatedTree.root, deflatedTree, this.txs); + if (tree) { + this.addTree(tree.tx.txid, tree); + this.updateTreeMap(tree.tx.txid, tree); + if (tree.mined) { + this.evict(tree.tx.txid); + } + } } expiring.forEach(expiringEntry => { if (this.txs.has(expiringEntry.key)) { @@ -385,6 +425,31 @@ class RbfCache { } }); this.staleCount = 0; + + // connect cached trees to current mempool transactions + const conflicts: Record }> = {}; + for (const tree of this.rbfTrees.values()) { + const tx = this.getTx(tree.tx.txid); + if (!tx || tree.mined) { + continue; + } + for (const vin of tx.vin) { + const conflict = spendMap.get(`${vin.txid}:${vin.vout}`); + if (conflict && conflict.txid !== tx.txid) { + if (!conflicts[conflict.txid]) { + conflicts[conflict.txid] = { + replacedBy: conflict, + replaces: new Set(), + }; + } + conflicts[conflict.txid].replaces.add(tx); + } + } + } + for (const { replacedBy, replaces } of Object.values(conflicts)) { + this.add([...replaces.values()], replacedBy); + } + await this.checkTrees(); logger.debug(`loaded ${txs.length} txs, ${trees.length} trees into rbf cache, ${expiring.length} due to expire, ${this.staleCount} were stale`); this.cleanup(); @@ -426,6 +491,12 @@ class RbfCache { return; } + // if this tx is already in the cache, return early + if (this.treeMap.has(txid)) { + this.removeTree(deflated.key); + return; + } + // recursively reconstruct child trees for (const childId of treeInfo.replaces) { const replaced = await this.importTree(mempool, root, childId, deflated, txs, mined); @@ -457,10 +528,6 @@ class RbfCache { fullRbf: treeInfo.fullRbf, replaces, }; - this.treeMap.set(txid, root); - if (root === txid) { - this.addTree(root, tree); - } return tree; } @@ -511,6 +578,7 @@ class RbfCache { processTxs(txs); } + // evict missing transactions for (const txid of txids) { if (!found[txid]) { this.evict(txid, false); diff --git a/backend/src/api/redis-cache.ts b/backend/src/api/redis-cache.ts index cbfa2f18b..1caade15b 100644 --- a/backend/src/api/redis-cache.ts +++ b/backend/src/api/redis-cache.ts @@ -365,6 +365,7 @@ class RedisCache { trees: rbfTrees.map(loadedTree => { loadedTree.value.key = loadedTree.key; return loadedTree.value; }), expiring: rbfExpirations, mempool: memPool.getMempool(), + spendMap: memPool.getSpendMap(), }); } diff --git a/backend/src/api/services/acceleration.ts b/backend/src/api/services/acceleration.ts index 386c40b8e..053da6e82 100644 --- a/backend/src/api/services/acceleration.ts +++ b/backend/src/api/services/acceleration.ts @@ -1,7 +1,10 @@ +import { WebSocket } from 'ws'; import config from '../../config'; import logger from '../../logger'; import { BlockExtended } from '../../mempool.interfaces'; import axios from 'axios'; +import mempool from '../mempool'; +import websocketHandler from '../websocket-handler'; type MyAccelerationStatus = 'requested' | 'accelerating' | 'done'; @@ -37,13 +40,23 @@ export interface AccelerationHistory { }; class AccelerationApi { + private ws: WebSocket | null = null; + private useWebsocket: boolean = config.MEMPOOL.OFFICIAL && config.MEMPOOL_SERVICES.ACCELERATIONS; + private startedWebsocketLoop: boolean = false; + private websocketConnected: boolean = false; + private onDemandPollingEnabled = !config.MEMPOOL_SERVICES.ACCELERATIONS; private apiPath = config.MEMPOOL.OFFICIAL ? (config.MEMPOOL_SERVICES.API + '/accelerator/accelerations') : (config.EXTERNAL_DATA_SERVER.MEMPOOL_API + '/accelerations'); - private _accelerations: Acceleration[] | null = null; + private websocketPath = config.MEMPOOL_SERVICES?.API ? `${config.MEMPOOL_SERVICES.API.replace('https://', 'wss://').replace('http://', 'ws://')}/accelerator/ws` : '/'; + private _accelerations: Record = {}; private lastPoll = 0; + private lastPing = Date.now(); + private lastPong = Date.now(); private forcePoll = false; private myAccelerations: Record = {}; - public get accelerations(): Acceleration[] | null { + public constructor() {} + + public getAccelerations(): Record { return this._accelerations; } @@ -52,7 +65,9 @@ class AccelerationApi { } public accelerationRequested(txid: string): void { - this.myAccelerations[txid] = { status: 'requested', added: Date.now() }; + if (this.onDemandPollingEnabled) { + this.myAccelerations[txid] = { status: 'requested', added: Date.now() }; + } } public accelerationConfirmed(): void { @@ -69,11 +84,18 @@ class AccelerationApi { } } - public async $updateAccelerations(): Promise { - if (config.MEMPOOL_SERVICES.ACCELERATIONS) { + public async $updateAccelerations(): Promise | null> { + if (this.useWebsocket && this.websocketConnected) { + return this._accelerations; + } + if (!this.onDemandPollingEnabled) { const accelerations = await this.$fetchAccelerations(); if (accelerations) { - this._accelerations = accelerations; + const latestAccelerations = {}; + for (const acc of accelerations) { + latestAccelerations[acc.txid] = acc; + } + this._accelerations = latestAccelerations; return this._accelerations; } } else { @@ -82,7 +104,7 @@ class AccelerationApi { return null; } - private async $updateAccelerationsOnDemand(): Promise { + private async $updateAccelerationsOnDemand(): Promise | null> { const shouldUpdate = this.forcePoll || this.countMyAccelerationsWithStatus('requested') > 0 || (this.countMyAccelerationsWithStatus('accelerating') > 0 && this.lastPoll < (Date.now() - (10 * 60 * 1000))); @@ -117,7 +139,11 @@ class AccelerationApi { } } - this._accelerations = Object.values(this.myAccelerations).map(({ acceleration }) => acceleration).filter(acc => acc) as Acceleration[]; + const latestAccelerations = {}; + for (const acc of Object.values(this.myAccelerations).map(({ acceleration }) => acceleration).filter(acc => acc) as Acceleration[]) { + latestAccelerations[acc.txid] = acc; + } + this._accelerations = latestAccelerations; return this._accelerations; } @@ -149,6 +175,148 @@ class AccelerationApi { } return anyAccelerated; } + + // get a list of accelerations that have changed between two sets of accelerations + public getAccelerationDelta(oldAccelerationMap: Record, newAccelerationMap: Record): string[] { + const changed: string[] = []; + const mempoolCache = mempool.getMempool(); + + for (const acceleration of Object.values(newAccelerationMap)) { + // skip transactions we don't know about + if (!mempoolCache[acceleration.txid]) { + continue; + } + if (oldAccelerationMap[acceleration.txid] == null) { + // new acceleration + changed.push(acceleration.txid); + } else { + if (oldAccelerationMap[acceleration.txid].feeDelta !== acceleration.feeDelta) { + // feeDelta changed + changed.push(acceleration.txid); + } else if (oldAccelerationMap[acceleration.txid].pools?.length) { + let poolsChanged = false; + const pools = new Set(); + oldAccelerationMap[acceleration.txid].pools.forEach(pool => { + pools.add(pool); + }); + acceleration.pools.forEach(pool => { + if (!pools.has(pool)) { + poolsChanged = true; + } else { + pools.delete(pool); + } + }); + if (pools.size > 0) { + poolsChanged = true; + } + if (poolsChanged) { + // pools changed + changed.push(acceleration.txid); + } + } + } + } + + for (const oldTxid of Object.keys(oldAccelerationMap)) { + if (!newAccelerationMap[oldTxid]) { + // removed + changed.push(oldTxid); + } + } + + return changed; + } + + private handleWebsocketMessage(msg: any): void { + if (msg?.accelerations !== null) { + const latestAccelerations = {}; + for (const acc of msg?.accelerations || []) { + latestAccelerations[acc.txid] = acc; + } + this._accelerations = latestAccelerations; + websocketHandler.handleAccelerationsChanged(this._accelerations); + } + } + + public async connectWebsocket(): Promise { + if (this.startedWebsocketLoop) { + return; + } + while (this.useWebsocket) { + this.startedWebsocketLoop = true; + if (!this.ws) { + this.ws = new WebSocket(this.websocketPath); + this.lastPing = 0; + + this.ws.on('open', () => { + logger.info(`Acceleration websocket opened to ${this.websocketPath}`); + this.websocketConnected = true; + this.ws?.send(JSON.stringify({ + 'watch-accelerations': true + })); + }); + + this.ws.on('error', (error) => { + let errMsg = `Acceleration websocket error on ${this.websocketPath}: ${error['code']}`; + if (error['errors']) { + errMsg += ' - ' + error['errors'].join(' - '); + } + logger.err(errMsg); + this.ws = null; + this.websocketConnected = false; + }); + + this.ws.on('close', () => { + logger.info('Acceleration websocket closed'); + this.ws = null; + this.websocketConnected = false; + }); + + this.ws.on('message', (data, isBinary) => { + try { + const msg = (isBinary ? data : data.toString()) as string; + const parsedMsg = msg?.length ? JSON.parse(msg) : null; + this.handleWebsocketMessage(parsedMsg); + } catch (e) { + logger.warn('Failed to parse acceleration websocket message: ' + (e instanceof Error ? e.message : e)); + } + }); + + this.ws.on('ping', () => { + logger.debug('received ping from acceleration websocket server'); + }); + + this.ws.on('pong', () => { + logger.debug('received pong from acceleration websocket server'); + this.lastPong = Date.now(); + }); + } else if (this.websocketConnected) { + if (this.lastPing && this.lastPing > this.lastPong && (Date.now() - this.lastPing > 10000)) { + logger.warn('No pong received within 10 seconds, terminating connection'); + try { + this.ws?.terminate(); + } catch (e) { + logger.warn('failed to terminate acceleration websocket connection: ' + (e instanceof Error ? e.message : e)); + } finally { + this.ws = null; + this.websocketConnected = false; + this.lastPing = 0; + } + } else if (!this.lastPing || (Date.now() - this.lastPing > 30000)) { + logger.debug('sending ping to acceleration websocket server'); + if (this.ws?.readyState === WebSocket.OPEN) { + try { + this.ws?.ping(); + this.lastPing = Date.now(); + } catch (e) { + logger.warn('failed to send ping to acceleration websocket server: ' + (e instanceof Error ? e.message : e)); + } + } + } + } + await new Promise(resolve => setTimeout(resolve, 5000)); + } + } } export default new AccelerationApi(); \ No newline at end of file diff --git a/backend/src/api/services/wallets.ts b/backend/src/api/services/wallets.ts index b20087ead..30f35feff 100644 --- a/backend/src/api/services/wallets.ts +++ b/backend/src/api/services/wallets.ts @@ -8,7 +8,15 @@ import { TransactionExtended } from '../../mempool.interfaces'; interface WalletAddress { address: string; active: boolean; - transactions?: IEsploraApi.AddressTxSummary[]; + stats: { + funded_txo_count: number; + funded_txo_sum: number; + spent_txo_count: number; + spent_txo_sum: number; + tx_count: number; + }; + transactions: IEsploraApi.AddressTxSummary[]; + lastSync: number; } interface WalletConfig { @@ -22,7 +30,7 @@ interface Wallet extends WalletConfig { lastPoll: number; } -const POLL_FREQUENCY = 60 * 60 * 1000; // 1 hour +const POLL_FREQUENCY = 5 * 60 * 1000; // 5 minutes class WalletApi { private wallets: Record = {}; @@ -39,8 +47,11 @@ class WalletApi { return this.wallets?.[wallet]?.addresses || {}; } - // resync wallet addresses from the provided API + // resync wallet addresses from the services backend async $syncWallets(): Promise { + if (!config.WALLETS.ENABLED || this.syncing) { + return; + } this.syncing = true; for (const walletKey of Object.keys(this.wallets)) { const wallet = this.wallets[walletKey]; @@ -77,10 +88,14 @@ class WalletApi { const refreshTransactions = !wallet.addresses[address.address] || address.active; if (refreshTransactions) { try { + const summary = await bitcoinApi.$getAddressTransactionSummary(address.address); + const addressInfo = await bitcoinApi.$getAddress(address.address); const walletAddress: WalletAddress = { address: address.address, active: address.active, transactions: await bitcoinApi.$getAddressTransactionSummary(address.address), + stats: addressInfo.chain_stats, + lastSync: Date.now(), }; logger.debug(`Synced ${walletAddress.transactions?.length || 0} transactions for wallet ${wallet.name} address ${address.address}`); wallet.addresses[address.address] = walletAddress; @@ -91,36 +106,61 @@ class WalletApi { } // check a new block for transactions that affect wallet address balances, and add relevant transactions to wallets - processBlock(block: IEsploraApi.Block, blockTxs: TransactionExtended[]): Record> { - const walletTransactions: Record> = {}; + processBlock(block: IEsploraApi.Block, blockTxs: TransactionExtended[]): Record { + const walletTransactions: Record = {}; for (const walletKey of Object.keys(this.wallets)) { const wallet = this.wallets[walletKey]; - walletTransactions[walletKey] = {}; + walletTransactions[walletKey] = []; for (const tx of blockTxs) { const funded: Record = {}; const spent: Record = {}; + const fundedCount: Record = {}; + const spentCount: Record = {}; + let anyMatch = false; for (const vin of tx.vin) { const address = vin.prevout?.scriptpubkey_address; if (address && wallet.addresses[address]) { + anyMatch = true; spent[address] = (spent[address] ?? 0) + (vin.prevout?.value ?? 0); + spentCount[address] = (spentCount[address] ?? 0) + 1; } } for (const vout of tx.vout) { const address = vout.scriptpubkey_address; if (address && wallet.addresses[address]) { + anyMatch = true; funded[address] = (funded[address] ?? 0) + (vout.value ?? 0); + fundedCount[address] = (fundedCount[address] ?? 0) + 1; } } for (const address of Object.keys({ ...funded, ...spent })) { - if (!walletTransactions[walletKey][address]) { - walletTransactions[walletKey][address] = []; - } - walletTransactions[walletKey][address].push({ + // update address stats + wallet.addresses[address].stats.tx_count++; + wallet.addresses[address].stats.funded_txo_count += fundedCount[address] || 0; + wallet.addresses[address].stats.spent_txo_count += spentCount[address] || 0; + wallet.addresses[address].stats.funded_txo_sum += funded[address] || 0; + wallet.addresses[address].stats.spent_txo_sum += spent[address] || 0; + // add tx to summary + const txSummary: IEsploraApi.AddressTxSummary = { txid: tx.txid, value: (funded[address] ?? 0) - (spent[address] ?? 0), height: block.height, time: block.timestamp, - }); + }; + wallet.addresses[address].transactions?.push(txSummary); + } + if (anyMatch) { + for (const address of Object.keys({ ...funded, ...spent })) { + if (!walletTransactions[walletKey][address]) { + walletTransactions[walletKey][address] = []; + } + walletTransactions[walletKey][address].push({ + txid: tx.txid, + value: (funded[address] ?? 0) - (spent[address] ?? 0), + height: block.height, + time: block.timestamp, + }); + } } } } @@ -128,4 +168,4 @@ class WalletApi { } } -export default new WalletApi(); \ No newline at end of file +export default new WalletApi(); diff --git a/backend/src/api/transaction-utils.ts b/backend/src/api/transaction-utils.ts index b3077b935..28fa72bba 100644 --- a/backend/src/api/transaction-utils.ts +++ b/backend/src/api/transaction-utils.ts @@ -121,6 +121,7 @@ class TransactionUtils { const adjustedVsize = Math.max(fractionalVsize, sigops * 5); // adjusted vsize = Max(weight, sigops * bytes_per_sigop) / witness_scale_factor const feePerVbytes = (transaction.fee || 0) / fractionalVsize; const adjustedFeePerVsize = (transaction.fee || 0) / adjustedVsize; + const effectiveFeePerVsize = transaction['effectiveFeePerVsize'] || adjustedFeePerVsize || feePerVbytes; const transactionExtended: MempoolTransactionExtended = Object.assign(transaction, { order: this.txidToOrdering(transaction.txid), vsize, @@ -128,7 +129,7 @@ class TransactionUtils { sigops, feePerVsize: feePerVbytes, adjustedFeePerVsize: adjustedFeePerVsize, - effectiveFeePerVsize: adjustedFeePerVsize, + effectiveFeePerVsize: effectiveFeePerVsize, }); if (!transactionExtended?.status?.confirmed && !transactionExtended.firstSeen) { transactionExtended.firstSeen = Math.round((Date.now() / 1000)); @@ -338,6 +339,87 @@ class TransactionUtils { const positionOfScript = hasAnnex ? witness.length - 3 : witness.length - 2; return witness[positionOfScript]; } + + // calculate the most parsimonious set of prioritizations given a list of block transactions + // (i.e. the most likely prioritizations and deprioritizations) + public identifyPrioritizedTransactions(transactions: any[], rateKey: string): { prioritized: string[], deprioritized: string[] } { + // find the longest increasing subsequence of transactions + // (adapted from https://en.wikipedia.org/wiki/Longest_increasing_subsequence#Efficient_algorithms) + // should be O(n log n) + const X = transactions.slice(1).reverse().map((tx) => ({ txid: tx.txid, rate: tx[rateKey] })); // standard block order is by *decreasing* effective fee rate, but we want to iterate in increasing order (and skip the coinbase) + if (X.length < 2) { + return { prioritized: [], deprioritized: [] }; + } + const N = X.length; + const P: number[] = new Array(N); + const M: number[] = new Array(N + 1); + M[0] = -1; // undefined so can be set to any value + + let L = 0; + for (let i = 0; i < N; i++) { + // Binary search for the smallest positive l ≤ L + // such that X[M[l]].effectiveFeePerVsize > X[i].effectiveFeePerVsize + let lo = 1; + let hi = L + 1; + while (lo < hi) { + const mid = lo + Math.floor((hi - lo) / 2); // lo <= mid < hi + if (X[M[mid]].rate > X[i].rate) { + hi = mid; + } else { // if X[M[mid]].effectiveFeePerVsize < X[i].effectiveFeePerVsize + lo = mid + 1; + } + } + + // After searching, lo == hi is 1 greater than the + // length of the longest prefix of X[i] + const newL = lo; + + // The predecessor of X[i] is the last index of + // the subsequence of length newL-1 + P[i] = M[newL - 1]; + M[newL] = i; + + if (newL > L) { + // If we found a subsequence longer than any we've + // found yet, update L + L = newL; + } + } + + // Reconstruct the longest increasing subsequence + // It consists of the values of X at the L indices: + // ..., P[P[M[L]]], P[M[L]], M[L] + const LIS: any[] = new Array(L); + let k = M[L]; + for (let j = L - 1; j >= 0; j--) { + LIS[j] = X[k]; + k = P[k]; + } + + const lisMap = new Map(); + LIS.forEach((tx, index) => lisMap.set(tx.txid, index)); + + const prioritized: string[] = []; + const deprioritized: string[] = []; + + let lastRate = X[0].rate; + + for (const tx of X) { + if (lisMap.has(tx.txid)) { + lastRate = tx.rate; + } else { + if (Math.abs(tx.rate - lastRate) < 0.1) { + // skip if the rate is almost the same as the previous transaction + } else if (tx.rate <= lastRate) { + prioritized.push(tx.txid); + } else { + deprioritized.push(tx.txid); + } + } + } + + return { prioritized, deprioritized }; + } } export default new TransactionUtils(); diff --git a/backend/src/api/websocket-handler.ts b/backend/src/api/websocket-handler.ts index 37f50fafc..13e27c360 100644 --- a/backend/src/api/websocket-handler.ts +++ b/backend/src/api/websocket-handler.ts @@ -3,7 +3,7 @@ import * as WebSocket from 'ws'; import { BlockExtended, TransactionExtended, MempoolTransactionExtended, WebsocketResponse, OptimizedStatistic, ILoadingIndicators, GbtCandidates, TxTrackingInfo, - MempoolBlockDelta, MempoolDelta, MempoolDeltaTxids + MempoolDelta, MempoolDeltaTxids } from '../mempool.interfaces'; import blocks from './blocks'; import memPool from './mempool'; @@ -16,11 +16,13 @@ import transactionUtils from './transaction-utils'; import rbfCache, { ReplacementInfo } from './rbf-cache'; import difficultyAdjustment from './difficulty-adjustment'; import feeApi from './fee-api'; +import BlocksRepository from '../repositories/BlocksRepository'; import BlocksAuditsRepository from '../repositories/BlocksAuditsRepository'; import BlocksSummariesRepository from '../repositories/BlocksSummariesRepository'; import Audit from './audit'; import priceUpdater from '../tasks/price-updater'; import { ApiPrice } from '../repositories/PricesRepository'; +import { Acceleration } from './services/acceleration'; import accelerationApi from './services/acceleration'; import mempool from './mempool'; import statistics from './statistics/statistics'; @@ -35,6 +37,7 @@ interface AddressTransactions { } import bitcoinSecondClient from './bitcoin/bitcoin-second-client'; import { calculateMempoolTxCpfp } from './cpfp'; +import { getRecentFirstSeen } from '../utils/file-read'; // valid 'want' subscriptions const wantable = [ @@ -58,6 +61,8 @@ class WebsocketHandler { private lastRbfSummary: ReplacementInfo[] | null = null; private mempoolSequence: number = 0; + private accelerations: Record = {}; + constructor() { } addWebsocketServer(wss: WebSocket.Server) { @@ -493,6 +498,42 @@ class WebsocketHandler { } } + handleAccelerationsChanged(accelerations: Record): void { + if (!this.webSocketServers.length) { + throw new Error('No WebSocket.Server has been set'); + } + + const websocketAccelerationDelta = accelerationApi.getAccelerationDelta(this.accelerations, accelerations); + this.accelerations = accelerations; + + if (!websocketAccelerationDelta.length) { + return; + } + + // pre-compute acceleration delta + const accelerationUpdate = { + added: websocketAccelerationDelta.map(txid => accelerations[txid]).filter(acc => acc != null), + removed: websocketAccelerationDelta.filter(txid => !accelerations[txid]), + }; + + try { + const response = JSON.stringify({ + accelerations: accelerationUpdate, + }); + + for (const server of this.webSocketServers) { + server.clients.forEach((client) => { + if (client.readyState !== WebSocket.OPEN) { + return; + } + client.send(response); + }); + } + } catch (e) { + logger.debug(`Error sending acceleration update to websocket clients: ${e}`); + } + } + handleReorg(): void { if (!this.webSocketServers.length) { throw new Error('No WebSocket.Server have been set'); @@ -529,8 +570,17 @@ class WebsocketHandler { } } + /** + * + * @param newMempool + * @param mempoolSize + * @param newTransactions array of transactions added this mempool update. + * @param recentlyDeletedTransactions array of arrays of transactions removed in the last N mempool updates, most recent first. + * @param accelerationDelta + * @param candidates + */ async $handleMempoolChange(newMempool: { [txid: string]: MempoolTransactionExtended }, mempoolSize: number, - newTransactions: MempoolTransactionExtended[], deletedTransactions: MempoolTransactionExtended[], accelerationDelta: string[], + newTransactions: MempoolTransactionExtended[], recentlyDeletedTransactions: MempoolTransactionExtended[][], accelerationDelta: string[], candidates?: GbtCandidates): Promise { if (!this.webSocketServers.length) { throw new Error('No WebSocket.Server have been set'); @@ -538,6 +588,8 @@ class WebsocketHandler { this.printLogs(); + const deletedTransactions = recentlyDeletedTransactions.length ? recentlyDeletedTransactions[0] : []; + const transactionIds = (memPool.limitGBT && candidates) ? Object.keys(candidates?.txs || {}) : Object.keys(newMempool); let added = newTransactions; let removed = deletedTransactions; @@ -556,9 +608,9 @@ class WebsocketHandler { const mBlockDeltas = mempoolBlocks.getMempoolBlockDeltas(); const mempoolInfo = memPool.getMempoolInfo(); const vBytesPerSecond = memPool.getVBytesPerSecond(); - const rbfTransactions = Common.findRbfTransactions(newTransactions, deletedTransactions); + const rbfTransactions = Common.findRbfTransactions(newTransactions, recentlyDeletedTransactions.flat()); const da = difficultyAdjustment.getDifficultyAdjustment(); - const accelerations = memPool.getAccelerations(); + const accelerations = accelerationApi.getAccelerations(); memPool.handleRbfTransactions(rbfTransactions); const rbfChanges = rbfCache.getRbfChanges(); let rbfReplacements; @@ -587,7 +639,7 @@ class WebsocketHandler { const replacedTransactions: { replaced: string, by: TransactionExtended }[] = []; for (const tx of newTransactions) { if (rbfTransactions[tx.txid]) { - for (const replaced of rbfTransactions[tx.txid]) { + for (const replaced of rbfTransactions[tx.txid].replaced) { replacedTransactions.push({ replaced: replaced.txid, by: tx }); } } @@ -666,10 +718,13 @@ class WebsocketHandler { const addressCache = this.makeAddressCache(newTransactions); const removedAddressCache = this.makeAddressCache(deletedTransactions); + const websocketAccelerationDelta = accelerationApi.getAccelerationDelta(this.accelerations, accelerations); + this.accelerations = accelerations; + // pre-compute acceleration delta const accelerationUpdate = { - added: accelerationDelta.map(txid => accelerations[txid]).filter(acc => acc != null), - removed: accelerationDelta.filter(txid => !accelerations[txid]), + added: websocketAccelerationDelta.map(txid => accelerations[txid]).filter(acc => acc != null), + removed: websocketAccelerationDelta.filter(txid => !accelerations[txid]), }; // TODO - Fix indentation after PR is merged @@ -832,6 +887,7 @@ class WebsocketHandler { accelerated: mempoolTx.acceleration || undefined, acceleratedBy: mempoolTx.acceleratedBy || undefined, acceleratedAt: mempoolTx.acceleratedAt || undefined, + feeDelta: mempoolTx.feeDelta || undefined, }, accelerationPositions: memPool.getAccelerationPositions(mempoolTx.txid), }; @@ -873,6 +929,7 @@ class WebsocketHandler { accelerated: mempoolTx.acceleration || undefined, acceleratedBy: mempoolTx.acceleratedBy || undefined, acceleratedAt: mempoolTx.acceleratedAt || undefined, + feeDelta: mempoolTx.feeDelta || undefined, }; if (!mempoolTx.cpfpChecked) { calculateMempoolTxCpfp(mempoolTx, newMempool); @@ -940,6 +997,8 @@ class WebsocketHandler { throw new Error('No WebSocket.Server have been set'); } + const blockTransactions = structuredClone(transactions); + this.printLogs(); await statistics.runStatistics(); @@ -949,10 +1008,10 @@ class WebsocketHandler { let transactionIds: string[] = (memPool.limitGBT) ? Object.keys(candidates?.txs || {}) : Object.keys(_memPool); const accelerations = Object.values(mempool.getAccelerations()); - await accelerationRepository.$indexAccelerationsForBlock(block, accelerations, transactions); + await accelerationRepository.$indexAccelerationsForBlock(block, accelerations, structuredClone(transactions)); const rbfTransactions = Common.findMinedRbfTransactions(transactions, memPool.getSpendMap()); - memPool.handleMinedRbfTransactions(rbfTransactions); + memPool.handleRbfTransactions(rbfTransactions); memPool.removeFromSpendMap(transactions); if (config.MEMPOOL.AUDIT && memPool.isInSync()) { @@ -969,7 +1028,7 @@ class WebsocketHandler { } if (Common.indexingEnabled()) { - const { censored, added, prioritized, fresh, sigop, fullrbf, accelerated, score, similarity } = Audit.auditBlock(transactions, projectedBlocks, auditMempool); + const { unseen, censored, added, prioritized, fresh, sigop, fullrbf, accelerated, score, similarity } = Audit.auditBlock(block.height, blockTransactions, projectedBlocks, auditMempool); const matchRate = Math.round(score * 100 * 100) / 100; const stripped = projectedBlocks[0]?.transactions ? projectedBlocks[0].transactions : []; @@ -991,9 +1050,11 @@ class WebsocketHandler { }); BlocksAuditsRepository.$saveAudit({ + version: 1, time: block.timestamp, height: block.height, hash: block.id, + unseenTxs: unseen, addedTxs: added, prioritizedTxs: prioritized, missingTxs: censored, @@ -1020,6 +1081,14 @@ class WebsocketHandler { } } + if (config.CORE_RPC.DEBUG_LOG_PATH && block.extras) { + const firstSeen = getRecentFirstSeen(block.id); + if (firstSeen) { + BlocksRepository.$saveFirstSeenTime(block.id, firstSeen); + block.extras.firstSeen = firstSeen; + } + } + const confirmedTxids: { [txid: string]: boolean } = {}; // Update mempool to remove transactions included in the new block @@ -1150,6 +1219,7 @@ class WebsocketHandler { accelerated: mempoolTx.acceleration || undefined, acceleratedBy: mempoolTx.acceleratedBy || undefined, acceleratedAt: mempoolTx.acceleratedAt || undefined, + feeDelta: mempoolTx.feeDelta || undefined, }, accelerationPositions: memPool.getAccelerationPositions(mempoolTx.txid), }); @@ -1172,6 +1242,7 @@ class WebsocketHandler { accelerated: mempoolTx.acceleration || undefined, acceleratedBy: mempoolTx.acceleratedBy || undefined, acceleratedAt: mempoolTx.acceleratedAt || undefined, + feeDelta: mempoolTx.feeDelta || undefined, }; } } diff --git a/backend/src/config.ts b/backend/src/config.ts index e272d8d39..ee95be62d 100644 --- a/backend/src/config.ts +++ b/backend/src/config.ts @@ -32,6 +32,7 @@ interface IConfig { AUTOMATIC_POOLS_UPDATE: boolean; POOLS_JSON_URL: string, POOLS_JSON_TREE_URL: string, + POOLS_UPDATE_DELAY: number, AUDIT: boolean; RUST_GBT: boolean; LIMIT_GBT: boolean; @@ -85,6 +86,7 @@ interface IConfig { TIMEOUT: number; COOKIE: boolean; COOKIE_PATH: string; + DEBUG_LOG_PATH: string; }; SECOND_CORE_RPC: { HOST: string; @@ -200,8 +202,9 @@ const defaults: IConfig = { 'AUTOMATIC_POOLS_UPDATE': false, 'POOLS_JSON_URL': 'https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json', 'POOLS_JSON_TREE_URL': 'https://api.github.com/repos/mempool/mining-pools/git/trees/master', + 'POOLS_UPDATE_DELAY': 604800, // in seconds, default is one week 'AUDIT': false, - 'RUST_GBT': false, + 'RUST_GBT': true, 'LIMIT_GBT': false, 'CPFP_INDEXING': false, 'MAX_BLOCKS_BULK_QUERY': 0, @@ -233,7 +236,8 @@ const defaults: IConfig = { 'PASSWORD': 'mempool', 'TIMEOUT': 60000, 'COOKIE': false, - 'COOKIE_PATH': '/bitcoin/.cookie' + 'COOKIE_PATH': '/bitcoin/.cookie', + 'DEBUG_LOG_PATH': '', }, 'SECOND_CORE_RPC': { 'HOST': '127.0.0.1', diff --git a/backend/src/index.ts b/backend/src/index.ts index 0e43dbe31..d939b7423 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -213,6 +213,8 @@ class Server { } }); } + + poolsUpdater.$startService(); } async runMainUpdateLoop(): Promise { @@ -231,11 +233,11 @@ class Server { const newMempool = await bitcoinApi.$getRawMempool(); const minFeeMempool = memPool.limitGBT ? await bitcoinSecondClient.getRawMemPool() : null; const minFeeTip = memPool.limitGBT ? await bitcoinSecondClient.getBlockCount() : -1; - const newAccelerations = await accelerationApi.$updateAccelerations(); + const latestAccelerations = await accelerationApi.$updateAccelerations(); const numHandledBlocks = await blocks.$updateBlocks(); const pollRate = config.MEMPOOL.POLL_RATE_MS * (indexer.indexerIsRunning() ? 10 : 1); if (numHandledBlocks === 0) { - await memPool.$updateMempool(newMempool, newAccelerations, minFeeMempool, minFeeTip, pollRate); + await memPool.$updateMempool(newMempool, latestAccelerations, minFeeMempool, minFeeTip, pollRate); } indexer.$run(); if (config.WALLETS.ENABLED) { @@ -316,8 +318,10 @@ class Server { priceUpdater.setRatesChangedCallback(websocketHandler.handleNewConversionRates.bind(websocketHandler)); } loadingIndicators.setProgressChangedCallback(websocketHandler.handleLoadingChanged.bind(websocketHandler)); + + accelerationApi.connectWebsocket(); } - + setUpHttpApiRoutes(): void { bitcoinRoutes.initRoutes(this.app); bitcoinCoreRoutes.initRoutes(this.app); diff --git a/backend/src/indexer.ts b/backend/src/indexer.ts index 0dd1090b8..dfd7f1317 100644 --- a/backend/src/indexer.ts +++ b/backend/src/indexer.ts @@ -10,6 +10,7 @@ import config from './config'; import auditReplicator from './replication/AuditReplication'; import statisticsReplicator from './replication/StatisticsReplication'; import AccelerationRepository from './repositories/AccelerationRepository'; +import BlocksAuditsRepository from './repositories/BlocksAuditsRepository'; export interface CoreIndex { name: string; @@ -192,6 +193,7 @@ class Indexer { await auditReplicator.$sync(); await statisticsReplicator.$sync(); await AccelerationRepository.$indexPastAccelerations(); + await BlocksAuditsRepository.$migrateAuditsV0toV1(); // do not wait for classify blocks to finish blocks.$classifyBlocks(); } catch (e) { diff --git a/backend/src/mempool.interfaces.ts b/backend/src/mempool.interfaces.ts index 0ad60f4b9..dc703af21 100644 --- a/backend/src/mempool.interfaces.ts +++ b/backend/src/mempool.interfaces.ts @@ -29,9 +29,11 @@ export interface PoolStats extends PoolInfo { } export interface BlockAudit { + version: number, time: number, height: number, hash: string, + unseenTxs: string[], missingTxs: string[], freshTxs: string[], sigopTxs: string[], @@ -126,6 +128,7 @@ export interface TransactionExtended extends IEsploraApi.Transaction { acceleration?: boolean; acceleratedBy?: number[]; acceleratedAt?: number; + feeDelta?: number; replacement?: boolean; uid?: number; flags?: number; @@ -296,6 +299,7 @@ export interface BlockExtension { id: number; // Note - This is the `unique_id`, not to mix with the auto increment `id` name: string; slug: string; + minerNames: string[] | null; }; avgFee: number; avgFeeRate: number; @@ -316,6 +320,7 @@ export interface BlockExtension { segwitTotalSize: number; segwitTotalWeight: number; header: string; + firstSeen: number | null; utxoSetChange: number; // Requires coinstatsindex, will be set to NULL otherwise utxoSetSize: number | null; @@ -382,8 +387,9 @@ export interface CpfpCluster { } export interface CpfpSummary { - transactions: TransactionExtended[]; + transactions: MempoolTransactionExtended[]; clusters: CpfpCluster[]; + version: number; } export interface Statistic { @@ -449,7 +455,7 @@ export interface OptimizedStatistic { export interface TxTrackingInfo { replacedBy?: string, - position?: { block: number, vsize: number, accelerated?: boolean, acceleratedBy?: number[], acceleratedAt?: number }, + position?: { block: number, vsize: number, accelerated?: boolean, acceleratedBy?: number[], acceleratedAt?: number, feeDelta?: number }, cpfp?: { ancestors?: Ancestor[], bestDescendant?: Ancestor | null, @@ -462,6 +468,7 @@ export interface TxTrackingInfo { accelerated?: boolean, acceleratedBy?: number[], acceleratedAt?: number, + feeDelta?: number, confirmed?: boolean } diff --git a/backend/src/replication/AuditReplication.ts b/backend/src/replication/AuditReplication.ts index 4ea629839..6f616dbbe 100644 --- a/backend/src/replication/AuditReplication.ts +++ b/backend/src/replication/AuditReplication.ts @@ -31,11 +31,11 @@ class AuditReplication { const missingAudits = await this.$getMissingAuditBlocks(); logger.debug(`Fetching missing audit data for ${missingAudits.length} blocks from trusted servers`, 'Replication'); - + let totalSynced = 0; let totalMissed = 0; let loggerTimer = Date.now(); - // process missing audits in batches of + // process missing audits in batches of BATCH_SIZE for (let i = 0; i < missingAudits.length; i += BATCH_SIZE) { const slice = missingAudits.slice(i, i + BATCH_SIZE); const results = await Promise.all(slice.map(hash => this.$syncAudit(hash))); @@ -109,9 +109,11 @@ class AuditReplication { version: 1, }); await blocksAuditsRepository.$saveAudit({ + version: auditSummary.version || 0, hash: blockHash, height: auditSummary.height, time: auditSummary.timestamp || auditSummary.time, + unseenTxs: auditSummary.unseenTxs || [], missingTxs: auditSummary.missingTxs || [], addedTxs: auditSummary.addedTxs || [], prioritizedTxs: auditSummary.prioritizedTxs || [], diff --git a/backend/src/repositories/AccelerationRepository.ts b/backend/src/repositories/AccelerationRepository.ts index 70fa78dc6..4c9896296 100644 --- a/backend/src/repositories/AccelerationRepository.ts +++ b/backend/src/repositories/AccelerationRepository.ts @@ -192,6 +192,7 @@ class AccelerationRepository { } } + // modifies block transactions public async $indexAccelerationsForBlock(block: BlockExtended, accelerations: Acceleration[], transactions: MempoolTransactionExtended[]): Promise { const blockTxs: { [txid: string]: MempoolTransactionExtended } = {}; for (const tx of transactions) { diff --git a/backend/src/repositories/BlocksAuditsRepository.ts b/backend/src/repositories/BlocksAuditsRepository.ts index 1e0d28689..3b3f79ce0 100644 --- a/backend/src/repositories/BlocksAuditsRepository.ts +++ b/backend/src/repositories/BlocksAuditsRepository.ts @@ -1,13 +1,24 @@ -import blocks from '../api/blocks'; import DB from '../database'; import logger from '../logger'; -import { BlockAudit, AuditScore, TransactionAudit } from '../mempool.interfaces'; +import bitcoinApi from '../api/bitcoin/bitcoin-api-factory'; +import { BlockAudit, AuditScore, TransactionAudit, TransactionStripped } from '../mempool.interfaces'; + +interface MigrationAudit { + version: number, + height: number, + id: string, + timestamp: number, + prioritizedTxs: string[], + acceleratedTxs: string[], + template: TransactionStripped[], + transactions: TransactionStripped[], +} class BlocksAuditRepositories { public async $saveAudit(audit: BlockAudit): Promise { try { - await DB.query(`INSERT INTO blocks_audits(time, height, hash, missing_txs, added_txs, prioritized_txs, fresh_txs, sigop_txs, fullrbf_txs, accelerated_txs, match_rate, expected_fees, expected_weight) - VALUE (FROM_UNIXTIME(?), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [audit.time, audit.height, audit.hash, JSON.stringify(audit.missingTxs), + await DB.query(`INSERT INTO blocks_audits(version, time, height, hash, unseen_txs, missing_txs, added_txs, prioritized_txs, fresh_txs, sigop_txs, fullrbf_txs, accelerated_txs, match_rate, expected_fees, expected_weight) + VALUE (?, FROM_UNIXTIME(?), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [audit.version, audit.time, audit.height, audit.hash, JSON.stringify(audit.unseenTxs), JSON.stringify(audit.missingTxs), JSON.stringify(audit.addedTxs), JSON.stringify(audit.prioritizedTxs), JSON.stringify(audit.freshTxs), JSON.stringify(audit.sigopTxs), JSON.stringify(audit.fullrbfTxs), JSON.stringify(audit.acceleratedTxs), audit.matchRate, audit.expectedFees, audit.expectedWeight]); } catch (e: any) { if (e.errno === 1062) { // ER_DUP_ENTRY - This scenario is possible upon node backend restart @@ -62,24 +73,30 @@ class BlocksAuditRepositories { public async $getBlockAudit(hash: string): Promise { try { const [rows]: any[] = await DB.query( - `SELECT blocks_audits.height, blocks_audits.hash as id, UNIX_TIMESTAMP(blocks_audits.time) as timestamp, - template, - missing_txs as missingTxs, - added_txs as addedTxs, - prioritized_txs as prioritizedTxs, - fresh_txs as freshTxs, - sigop_txs as sigopTxs, - fullrbf_txs as fullrbfTxs, - accelerated_txs as acceleratedTxs, - match_rate as matchRate, - expected_fees as expectedFees, - expected_weight as expectedWeight + `SELECT + blocks_audits.version, + blocks_audits.height, + blocks_audits.hash as id, + UNIX_TIMESTAMP(blocks_audits.time) as timestamp, + template, + unseen_txs as unseenTxs, + missing_txs as missingTxs, + added_txs as addedTxs, + prioritized_txs as prioritizedTxs, + fresh_txs as freshTxs, + sigop_txs as sigopTxs, + fullrbf_txs as fullrbfTxs, + accelerated_txs as acceleratedTxs, + match_rate as matchRate, + expected_fees as expectedFees, + expected_weight as expectedWeight FROM blocks_audits JOIN blocks_templates ON blocks_templates.id = blocks_audits.hash WHERE blocks_audits.hash = ? `, [hash]); if (rows.length) { + rows[0].unseenTxs = JSON.parse(rows[0].unseenTxs); rows[0].missingTxs = JSON.parse(rows[0].missingTxs); rows[0].addedTxs = JSON.parse(rows[0].addedTxs); rows[0].prioritizedTxs = JSON.parse(rows[0].prioritizedTxs); @@ -101,7 +118,7 @@ class BlocksAuditRepositories { public async $getBlockTxAudit(hash: string, txid: string): Promise { try { const blockAudit = await this.$getBlockAudit(hash); - + if (blockAudit) { const isAdded = blockAudit.addedTxs.includes(txid); const isPrioritized = blockAudit.prioritizedTxs.includes(txid); @@ -115,16 +132,17 @@ class BlocksAuditRepositories { firstSeen = tx.time; } }); + const wasSeen = blockAudit.version === 1 ? !blockAudit.unseenTxs.includes(txid) : (isExpected || isPrioritized || isAccelerated); return { - seen: isExpected || isPrioritized || isAccelerated, + seen: wasSeen, expected: isExpected, - added: isAdded, + added: isAdded && (blockAudit.version === 0 || !wasSeen), prioritized: isPrioritized, conflict: isConflict, accelerated: isAccelerated, firstSeen, - } + }; } return null; } catch (e: any) { @@ -186,6 +204,96 @@ class BlocksAuditRepositories { throw e; } } + + /** + * [INDEXING] Migrate audits from v0 to v1 + */ + public async $migrateAuditsV0toV1(): Promise { + try { + let done = false; + let processed = 0; + let lastHeight; + while (!done) { + const [toMigrate]: MigrationAudit[][] = await DB.query( + `SELECT + blocks_audits.height as height, + blocks_audits.hash as id, + UNIX_TIMESTAMP(blocks_audits.time) as timestamp, + blocks_summaries.transactions as transactions, + blocks_templates.template as template, + blocks_audits.prioritized_txs as prioritizedTxs, + blocks_audits.accelerated_txs as acceleratedTxs + FROM blocks_audits + JOIN blocks_summaries ON blocks_summaries.id = blocks_audits.hash + JOIN blocks_templates ON blocks_templates.id = blocks_audits.hash + WHERE blocks_audits.version = 0 + AND blocks_summaries.version = 2 + ORDER BY blocks_audits.height DESC + LIMIT 100 + `) as any[]; + + if (toMigrate.length <= 0 || lastHeight === toMigrate[0].height) { + done = true; + break; + } + lastHeight = toMigrate[0].height; + + logger.info(`migrating ${toMigrate.length} audits to version 1`); + + for (const audit of toMigrate) { + // unpack JSON-serialized transaction lists + audit.transactions = JSON.parse((audit.transactions as any as string) || '[]'); + audit.template = JSON.parse((audit.template as any as string) || '[]'); + + // we know transactions in the template, or marked "prioritized" or "accelerated" + // were seen in our mempool before the block was mined. + const isSeen = new Set(); + for (const tx of audit.template) { + isSeen.add(tx.txid); + } + for (const txid of audit.prioritizedTxs) { + isSeen.add(txid); + } + for (const txid of audit.acceleratedTxs) { + isSeen.add(txid); + } + const unseenTxs = audit.transactions.slice(0).map(tx => tx.txid).filter(txid => !isSeen.has(txid)); + + // identify "prioritized" transactions + const prioritizedTxs: string[] = []; + let lastEffectiveRate = 0; + // Iterate over the mined template from bottom to top (excluding the coinbase) + // Transactions should appear in ascending order of mining priority. + for (let i = audit.transactions.length - 1; i > 0; i--) { + const blockTx = audit.transactions[i]; + // If a tx has a lower in-band effective fee rate than the previous tx, + // it must have been prioritized out-of-band (in order to have a higher mining priority) + // so exclude from the analysis. + if ((blockTx.rate || 0) < lastEffectiveRate) { + prioritizedTxs.push(blockTx.txid); + } else { + lastEffectiveRate = blockTx.rate || 0; + } + } + + // Update audit in the database + await DB.query(` + UPDATE blocks_audits SET + version = ?, + unseen_txs = ?, + prioritized_txs = ? + WHERE hash = ? + `, [1, JSON.stringify(unseenTxs), JSON.stringify(prioritizedTxs), audit.id]); + } + + processed += toMigrate.length; + } + + logger.info(`migrated ${processed} audits to version 1`); + } catch (e: any) { + logger.err(`Error while migrating audits from v0 to v1. Will try again later. Reason: ` + (e instanceof Error ? e.message : e)); + } + } } export default new BlocksAuditRepositories(); diff --git a/backend/src/repositories/BlocksRepository.ts b/backend/src/repositories/BlocksRepository.ts index 90100a767..424a668c7 100644 --- a/backend/src/repositories/BlocksRepository.ts +++ b/backend/src/repositories/BlocksRepository.ts @@ -14,6 +14,7 @@ import chainTips from '../api/chain-tips'; import blocks from '../api/blocks'; import BlocksAuditsRepository from './BlocksAuditsRepository'; import transactionUtils from '../api/transaction-utils'; +import { parseDATUMTemplateCreator } from '../utils/bitcoin-script'; interface DatabaseBlock { id: string; @@ -56,6 +57,7 @@ interface DatabaseBlock { utxoSetChange: number; utxoSetSize: number; totalInputAmt: number; + firstSeen: number; } const BLOCK_DB_FIELDS = ` @@ -98,7 +100,8 @@ const BLOCK_DB_FIELDS = ` blocks.header, blocks.utxoset_change AS utxoSetChange, blocks.utxoset_size AS utxoSetSize, - blocks.total_input_amt AS totalInputAmt + blocks.total_input_amt AS totalInputAmt, + UNIX_TIMESTAMP(blocks.first_seen) AS firstSeen `; class BlocksRepository { @@ -498,7 +501,7 @@ class BlocksRepository { } query += ` ORDER BY height DESC - LIMIT 10`; + LIMIT 100`; try { const [rows]: any[] = await DB.query(query, params); @@ -1020,6 +1023,24 @@ class BlocksRepository { } } + /** + * Save block first seen time + * + * @param id + */ + public async $saveFirstSeenTime(id: string, firstSeen: number): Promise { + try { + await DB.query(` + UPDATE blocks SET first_seen = FROM_UNIXTIME(?) + WHERE hash = ?`, + [firstSeen, id] + ); + } catch (e) { + logger.err(`Cannot update block first seen time. Reason: ` + (e instanceof Error ? e.message : e)); + throw e; + } + } + /** * Convert a mysql row block into a BlockExtended. Note that you * must provide the correct field into dbBlk object param @@ -1054,6 +1075,7 @@ class BlocksRepository { id: dbBlk.poolId, name: dbBlk.poolName, slug: dbBlk.poolSlug, + minerNames: null, }; extras.avgFee = dbBlk.avgFee; extras.avgFeeRate = dbBlk.avgFeeRate; @@ -1076,6 +1098,7 @@ class BlocksRepository { extras.utxoSetSize = dbBlk.utxoSetSize; extras.totalInputAmt = dbBlk.totalInputAmt; extras.virtualSize = dbBlk.weight / 4.0; + extras.firstSeen = dbBlk.firstSeen; // Re-org can happen after indexing so we need to always get the // latest state from core @@ -1106,7 +1129,7 @@ class BlocksRepository { let summaryVersion = 0; if (config.MEMPOOL.BACKEND === 'esplora') { const txs = (await bitcoinApi.$getTxsForBlock(dbBlk.id)).map(tx => transactionUtils.extendTransaction(tx)); - summary = blocks.summarizeBlockTransactions(dbBlk.id, txs); + summary = blocks.summarizeBlockTransactions(dbBlk.id, dbBlk.height, txs); summaryVersion = 1; } else { // Call Core RPC @@ -1123,6 +1146,10 @@ class BlocksRepository { } } + if (extras.pool.name === 'OCEAN') { + extras.pool.minerNames = parseDATUMTemplateCreator(extras.coinbaseRaw); + } + blk.extras = extras; return blk; } diff --git a/backend/src/rpc-api/commands.ts b/backend/src/rpc-api/commands.ts index 85675230b..89ab9cfe6 100644 --- a/backend/src/rpc-api/commands.ts +++ b/backend/src/rpc-api/commands.ts @@ -83,6 +83,7 @@ module.exports = { signRawTransaction: 'signrawtransaction', // bitcoind v0.7.0+ stop: 'stop', submitBlock: 'submitblock', // bitcoind v0.7.0+ + submitPackage: 'submitpackage', validateAddress: 'validateaddress', verifyChain: 'verifychain', // bitcoind v0.9.0+ verifyMessage: 'verifymessage', diff --git a/backend/src/tasks/pools-updater.ts b/backend/src/tasks/pools-updater.ts index a3a3265c6..652383a2a 100644 --- a/backend/src/tasks/pools-updater.ts +++ b/backend/src/tasks/pools-updater.ts @@ -6,16 +6,30 @@ import backendInfo from '../api/backend-info'; import logger from '../logger'; import { SocksProxyAgent } from 'socks-proxy-agent'; import * as https from 'https'; +import { Common } from '../api/common'; /** * Maintain the most recent version of pools-v2.json */ class PoolsUpdater { + tag = 'PoolsUpdater'; + lastRun: number = 0; currentSha: string | null = null; poolsUrl: string = config.MEMPOOL.POOLS_JSON_URL; treeUrl: string = config.MEMPOOL.POOLS_JSON_TREE_URL; + public async $startService(): Promise { + while ('Bitcoin is still alive') { + try { + await this.updatePoolsJson(); + } catch (e: any) { + logger.info(`Exception ${e} in PoolsUpdater::$startService. Code: ${e.code}. Message: ${e.message}`, this.tag); + } + await Common.sleep$(10000); + } + } + public async updatePoolsJson(): Promise { if (['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK) === false || config.MEMPOOL.ENABLED === false @@ -23,11 +37,8 @@ class PoolsUpdater { return; } - const oneWeek = 604800; - const oneDay = 86400; - const now = new Date().getTime() / 1000; - if (now - this.lastRun < oneWeek) { // Execute the PoolsUpdate only once a week, or upon restart + if (now - this.lastRun < config.MEMPOOL.POOLS_UPDATE_DELAY) { // Execute the PoolsUpdate only once a week, or upon restart return; } @@ -43,7 +54,7 @@ class PoolsUpdater { this.currentSha = await this.getShaFromDb(); } - logger.debug(`pools-v2.json sha | Current: ${this.currentSha} | Github: ${githubSha}`); + logger.debug(`pools-v2.json sha | Current: ${this.currentSha} | Github: ${githubSha}`, this.tag); if (this.currentSha !== null && this.currentSha === githubSha) { return; } @@ -53,16 +64,16 @@ class PoolsUpdater { config.MEMPOOL.AUTOMATIC_POOLS_UPDATE !== true && // Automatic pools update is disabled !process.env.npm_config_update_pools // We're not manually updating mining pool ) { - logger.warn(`Updated mining pools data is available (${githubSha}) but AUTOMATIC_POOLS_UPDATE is disabled`); - logger.info(`You can update your mining pools using the --update-pools command flag. You may want to clear your nginx cache as well if applicable`); + logger.warn(`Updated mining pools data is available (${githubSha}) but AUTOMATIC_POOLS_UPDATE is disabled`, this.tag); + logger.info(`You can update your mining pools using the --update-pools command flag. You may want to clear your nginx cache as well if applicable`, this.tag); return; } const network = config.SOCKS5PROXY.ENABLED ? 'tor' : 'clearnet'; if (this.currentSha === null) { - logger.info(`Downloading pools-v2.json for the first time from ${this.poolsUrl} over ${network}`, logger.tags.mining); + logger.info(`Downloading pools-v2.json for the first time from ${this.poolsUrl} over ${network}`, this.tag); } else { - logger.warn(`pools-v2.json is outdated, fetching latest from ${this.poolsUrl} over ${network}`, logger.tags.mining); + logger.warn(`pools-v2.json is outdated, fetching latest from ${this.poolsUrl} over ${network}`, this.tag); } const poolsJson = await this.query(this.poolsUrl); if (poolsJson === undefined) { @@ -71,7 +82,7 @@ class PoolsUpdater { poolsParser.setMiningPools(poolsJson); if (config.DATABASE.ENABLED === false) { // Don't run db operations - logger.info(`Mining pools-v2.json (${githubSha}) import completed (no database)`); + logger.info(`Mining pools-v2.json (${githubSha}) import completed (no database)`, this.tag); return; } @@ -81,14 +92,14 @@ class PoolsUpdater { await this.updateDBSha(githubSha); await DB.query('COMMIT;'); } catch (e) { - logger.err(`Could not migrate mining pools, rolling back. Exception: ${JSON.stringify(e)}`, logger.tags.mining); + logger.err(`Could not migrate mining pools, rolling back. Exception: ${JSON.stringify(e)}`, this.tag); await DB.query('ROLLBACK;'); } - logger.info(`Mining pools-v2.json (${githubSha}) import completed`); + logger.info(`Mining pools-v2.json (${githubSha}) import completed`, this.tag); } catch (e) { - this.lastRun = now - (oneWeek - oneDay); // Try again in 24h instead of waiting next week - logger.err(`PoolsUpdater failed. Will try again in 24h. Exception: ${JSON.stringify(e)}`, logger.tags.mining); + this.lastRun = now - 600; // Try again in 10 minutes + logger.err(`PoolsUpdater failed. Will try again in 10 minutes. Exception: ${JSON.stringify(e)}`, this.tag); } } @@ -102,7 +113,7 @@ class PoolsUpdater { await DB.query('DELETE FROM state where name="pools_json_sha"'); await DB.query(`INSERT INTO state VALUES('pools_json_sha', NULL, '${githubSha}')`); } catch (e) { - logger.err('Cannot save github pools-v2.json sha into the db. Reason: ' + (e instanceof Error ? e.message : e), logger.tags.mining); + logger.err('Cannot save github pools-v2.json sha into the db. Reason: ' + (e instanceof Error ? e.message : e), this.tag); } } } @@ -115,7 +126,7 @@ class PoolsUpdater { const [rows]: any[] = await DB.query('SELECT string FROM state WHERE name="pools_json_sha"'); return (rows.length > 0 ? rows[0].string : null); } catch (e) { - logger.err('Cannot fetch pools-v2.json sha from db. Reason: ' + (e instanceof Error ? e.message : e), logger.tags.mining); + logger.err('Cannot fetch pools-v2.json sha from db. Reason: ' + (e instanceof Error ? e.message : e), this.tag); return null; } } @@ -134,7 +145,7 @@ class PoolsUpdater { } } - logger.err(`Cannot find "pools-v2.json" in git tree (${this.treeUrl})`, logger.tags.mining); + logger.err(`Cannot find "pools-v2.json" in git tree (${this.treeUrl})`, this.tag); return null; } @@ -186,7 +197,7 @@ class PoolsUpdater { } return data.data; } catch (e) { - logger.err('Could not connect to Github. Reason: ' + (e instanceof Error ? e.message : e)); + logger.err('Could not connect to Github. Reason: ' + (e instanceof Error ? e.message : e), this.tag); retry++; } await setDelay(config.MEMPOOL.EXTERNAL_RETRY_INTERVAL); diff --git a/backend/src/utils/api.ts b/backend/src/utils/api.ts new file mode 100644 index 000000000..69d746b9f --- /dev/null +++ b/backend/src/utils/api.ts @@ -0,0 +1,9 @@ +import { Request, Response } from 'express'; + +export function handleError(req: Request, res: Response, statusCode: number, errorMessage: string | unknown): void { + if (req.accepts('json')) { + res.status(statusCode).json({ error: errorMessage }); + } else { + res.status(statusCode).send(errorMessage); + } +} \ No newline at end of file diff --git a/backend/src/utils/bitcoin-script.ts b/backend/src/utils/bitcoin-script.ts index 3414e8269..f9755fcb4 100644 --- a/backend/src/utils/bitcoin-script.ts +++ b/backend/src/utils/bitcoin-script.ts @@ -158,7 +158,7 @@ export function parseMultisigScript(script: string): void | { m: number, n: numb if (!opN) { return; } - if (!opN.startsWith('OP_PUSHNUM_')) { + if (opN !== 'OP_0' && !opN.startsWith('OP_PUSHNUM_')) { return; } const n = parseInt(opN.match(/[0-9]+/)?.[0] || '', 10); @@ -178,7 +178,7 @@ export function parseMultisigScript(script: string): void | { m: number, n: numb if (!opM) { return; } - if (!opM.startsWith('OP_PUSHNUM_')) { + if (opM !== 'OP_0' && !opM.startsWith('OP_PUSHNUM_')) { return; } const m = parseInt(opM.match(/[0-9]+/)?.[0] || '', 10); @@ -200,4 +200,28 @@ export function getVarIntLength(n: number): number { } else { return 9; } +} + +/** Extracts miner names from a DATUM coinbase transaction */ +export function parseDATUMTemplateCreator(coinbaseRaw: string): string[] | null { + let bytes: number[] = []; + for (let c = 0; c < coinbaseRaw.length; c += 2) { + bytes.push(parseInt(coinbaseRaw.slice(c, c + 2), 16)); + } + + // Skip block height + let tagLengthByte = 1 + bytes[0]; + + let tagsLength = bytes[tagLengthByte]; + if (tagsLength == 0x4c) { + tagLengthByte += 1; + tagsLength = bytes[tagLengthByte]; + } + + const tagStart = tagLengthByte + 1; + const tags = bytes.slice(tagStart, tagStart + tagsLength); + let tagString = String.fromCharCode(...tags); + tagString = tagString.replace('\x00', ''); + + return tagString.split('\x0f').map((name) => name.replace(/[^a-zA-Z0-9 ]/g, '')); } \ No newline at end of file diff --git a/backend/src/utils/file-read.ts b/backend/src/utils/file-read.ts new file mode 100644 index 000000000..ddf8660c4 --- /dev/null +++ b/backend/src/utils/file-read.ts @@ -0,0 +1,58 @@ +import * as fs from 'fs'; +import logger from '../logger'; +import config from '../config'; + +function readFile(filePath: string, bufferSize?: number): string[] { + const fileSize = fs.statSync(filePath).size; + const chunkSize = bufferSize || fileSize; + const fileDescriptor = fs.openSync(filePath, 'r'); + const buffer = Buffer.alloc(chunkSize); + + fs.readSync(fileDescriptor, buffer, 0, chunkSize, fileSize - chunkSize); + fs.closeSync(fileDescriptor); + + const lines = buffer.toString('utf8', 0, chunkSize).split('\n'); + return lines; +} + +function extractDateFromLogLine(line: string): number | undefined { + // Extract time from log: "2021-08-31T12:34:56Z" or "2021-08-31T12:34:56.123456Z" + const dateMatch = line.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{6})?Z/); + if (!dateMatch) { + return undefined; + } + + const dateStr = dateMatch[0]; + const date = new Date(dateStr); + let timestamp = Math.floor(date.getTime() / 1000); // Remove decimal (microseconds are added later) + + const timePart = dateStr.split('T')[1]; + const microseconds = timePart.split('.')[1] || ''; + + if (!microseconds) { + return timestamp; + } + + return parseFloat(timestamp + '.' + microseconds); +} + +export function getRecentFirstSeen(hash: string): number | undefined { + const debugLogPath = config.CORE_RPC.DEBUG_LOG_PATH; + if (debugLogPath) { + try { + // Read the last few lines of debug.log + const lines = readFile(debugLogPath, 2048); + + for (let i = lines.length - 1; i >= 0; i--) { + const line = lines[i]; + if (line && line.includes(`Saw new header hash=${hash}`)) { + return extractDateFromLogLine(line); + } + } + } catch (e) { + logger.err(`Cannot parse block first seen time from Core logs. Reason: ` + (e instanceof Error ? e.message : e)); + } + } + + return undefined; +} diff --git a/docker/README.md b/docker/README.md index ce1548e91..2658914eb 100644 --- a/docker/README.md +++ b/docker/README.md @@ -109,6 +109,7 @@ Below we list all settings from `mempool-config.json` and the corresponding over "AUTOMATIC_POOLS_UPDATE": false, "POOLS_JSON_URL": "https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json", "POOLS_JSON_TREE_URL": "https://api.github.com/repos/mempool/mining-pools/git/trees/master", + "POOLS_UPDATE_DELAY": 604800, "CPFP_INDEXING": false, "MAX_BLOCKS_BULK_QUERY": 0, "DISK_CACHE_BLOCK_INTERVAL": 6, @@ -140,6 +141,7 @@ Corresponding `docker-compose.yml` overrides: MEMPOOL_AUTOMATIC_POOLS_UPDATE: "" MEMPOOL_POOLS_JSON_URL: "" MEMPOOL_POOLS_JSON_TREE_URL: "" + MEMPOOL_POOLS_UPDATE_DELAY: "" MEMPOOL_CPFP_INDEXING: "" MEMPOOL_MAX_BLOCKS_BULK_QUERY: "" MEMPOOL_DISK_CACHE_BLOCK_INTERVAL: "" diff --git a/docker/backend/mempool-config.json b/docker/backend/mempool-config.json index 79cd14644..c7ade9b7b 100644 --- a/docker/backend/mempool-config.json +++ b/docker/backend/mempool-config.json @@ -36,6 +36,7 @@ "ALLOW_UNREACHABLE": __MEMPOOL_ALLOW_UNREACHABLE__, "POOLS_JSON_TREE_URL": "__MEMPOOL_POOLS_JSON_TREE_URL__", "POOLS_JSON_URL": "__MEMPOOL_POOLS_JSON_URL__", + "POOLS_UPDATE_DELAY": __MEMPOOL_POOLS_UPDATE_DELAY__, "PRICE_UPDATES_PER_HOUR": __MEMPOOL_PRICE_UPDATES_PER_HOUR__, "MAX_TRACKED_ADDRESSES": __MEMPOOL_MAX_TRACKED_ADDRESSES__ }, @@ -46,7 +47,8 @@ "PASSWORD": "__CORE_RPC_PASSWORD__", "TIMEOUT": __CORE_RPC_TIMEOUT__, "COOKIE": __CORE_RPC_COOKIE__, - "COOKIE_PATH": "__CORE_RPC_COOKIE_PATH__" + "COOKIE_PATH": "__CORE_RPC_COOKIE_PATH__", + "DEBUG_LOG_PATH": "__CORE_RPC_DEBUG_LOG_PATH__" }, "ELECTRUM": { "HOST": "__ELECTRUM_HOST__", diff --git a/docker/backend/start.sh b/docker/backend/start.sh index daab09990..d4765972e 100755 --- a/docker/backend/start.sh +++ b/docker/backend/start.sh @@ -29,8 +29,9 @@ __MEMPOOL_STDOUT_LOG_MIN_PRIORITY__=${MEMPOOL_STDOUT_LOG_MIN_PRIORITY:=info} __MEMPOOL_AUTOMATIC_POOLS_UPDATE__=${MEMPOOL_AUTOMATIC_POOLS_UPDATE:=false} __MEMPOOL_POOLS_JSON_URL__=${MEMPOOL_POOLS_JSON_URL:=https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json} __MEMPOOL_POOLS_JSON_TREE_URL__=${MEMPOOL_POOLS_JSON_TREE_URL:=https://api.github.com/repos/mempool/mining-pools/git/trees/master} +__MEMPOOL_POOLS_UPDATE_DELAY__=${MEMPOOL_POOLS_UPDATE_DELAY:=604800} __MEMPOOL_AUDIT__=${MEMPOOL_AUDIT:=false} -__MEMPOOL_RUST_GBT__=${MEMPOOL_RUST_GBT:=false} +__MEMPOOL_RUST_GBT__=${MEMPOOL_RUST_GBT:=true} __MEMPOOL_LIMIT_GBT__=${MEMPOOL_LIMIT_GBT:=false} __MEMPOOL_CPFP_INDEXING__=${MEMPOOL_CPFP_INDEXING:=false} __MEMPOOL_MAX_BLOCKS_BULK_QUERY__=${MEMPOOL_MAX_BLOCKS_BULK_QUERY:=0} @@ -48,6 +49,7 @@ __CORE_RPC_PASSWORD__=${CORE_RPC_PASSWORD:=mempool} __CORE_RPC_TIMEOUT__=${CORE_RPC_TIMEOUT:=60000} __CORE_RPC_COOKIE__=${CORE_RPC_COOKIE:=false} __CORE_RPC_COOKIE_PATH__=${CORE_RPC_COOKIE_PATH:=""} +__CORE_RPC_DEBUG_LOG_PATH__=${CORE_RPC_DEBUG_LOG_PATH:=""} # ELECTRUM __ELECTRUM_HOST__=${ELECTRUM_HOST:=127.0.0.1} @@ -144,7 +146,7 @@ __REPLICATION_STATISTICS_START_TIME__=${REPLICATION_STATISTICS_START_TIME:=14819 __REPLICATION_SERVERS__=${REPLICATION_SERVERS:=[]} # MEMPOOL_SERVICES -__MEMPOOL_SERVICES_API__=${MEMPOOL_SERVICES_API:=""} +__MEMPOOL_SERVICES_API__=${MEMPOOL_SERVICES_API:="https://mempool.space/api/v1/services"} __MEMPOOL_SERVICES_ACCELERATIONS__=${MEMPOOL_SERVICES_ACCELERATIONS:=false} # REDIS @@ -187,6 +189,7 @@ sed -i "s!__MEMPOOL_STDOUT_LOG_MIN_PRIORITY__!${__MEMPOOL_STDOUT_LOG_MIN_PRIORIT sed -i "s!__MEMPOOL_AUTOMATIC_POOLS_UPDATE__!${__MEMPOOL_AUTOMATIC_POOLS_UPDATE__}!g" mempool-config.json sed -i "s!__MEMPOOL_POOLS_JSON_URL__!${__MEMPOOL_POOLS_JSON_URL__}!g" mempool-config.json sed -i "s!__MEMPOOL_POOLS_JSON_TREE_URL__!${__MEMPOOL_POOLS_JSON_TREE_URL__}!g" mempool-config.json +sed -i "s!__MEMPOOL_POOLS_UPDATE_DELAY__!${__MEMPOOL_POOLS_UPDATE_DELAY__}!g" mempool-config.json sed -i "s!__MEMPOOL_AUDIT__!${__MEMPOOL_AUDIT__}!g" mempool-config.json sed -i "s!__MEMPOOL_RUST_GBT__!${__MEMPOOL_RUST_GBT__}!g" mempool-config.json sed -i "s!__MEMPOOL_LIMIT_GBT__!${__MEMPOOL_LIMIT_GBT__}!g" mempool-config.json @@ -205,6 +208,7 @@ sed -i "s!__CORE_RPC_PASSWORD__!${__CORE_RPC_PASSWORD__}!g" mempool-config.json sed -i "s!__CORE_RPC_TIMEOUT__!${__CORE_RPC_TIMEOUT__}!g" mempool-config.json sed -i "s!__CORE_RPC_COOKIE__!${__CORE_RPC_COOKIE__}!g" mempool-config.json sed -i "s!__CORE_RPC_COOKIE_PATH__!${__CORE_RPC_COOKIE_PATH__}!g" mempool-config.json +sed -i "s!__CORE_RPC_DEBUG_LOG_PATH__!${__CORE_RPC_DEBUG_LOG_PATH__}!g" mempool-config.json sed -i "s!__ELECTRUM_HOST__!${__ELECTRUM_HOST__}!g" mempool-config.json sed -i "s!__ELECTRUM_PORT__!${__ELECTRUM_PORT__}!g" mempool-config.json diff --git a/docker/frontend/entrypoint.sh b/docker/frontend/entrypoint.sh index 20b391087..2086188c9 100644 --- a/docker/frontend/entrypoint.sh +++ b/docker/frontend/entrypoint.sh @@ -41,7 +41,7 @@ __TESTNET_BLOCK_AUDIT_START_HEIGHT__=${TESTNET_BLOCK_AUDIT_START_HEIGHT:=0} __SIGNET_BLOCK_AUDIT_START_HEIGHT__=${SIGNET_BLOCK_AUDIT_START_HEIGHT:=0} __ACCELERATOR__=${ACCELERATOR:=false} __ACCELERATOR_BUTTON__=${ACCELERATOR_BUTTON:=true} -__SERVICES_API__=${SERVICES_API:=false} +__SERVICES_API__=${SERVICES_API:=https://mempool.space/api/v1/services} __PUBLIC_ACCELERATIONS__=${PUBLIC_ACCELERATIONS:=false} __HISTORICAL_PRICE__=${HISTORICAL_PRICE:=true} __ADDITIONAL_CURRENCIES__=${ADDITIONAL_CURRENCIES:=false} diff --git a/frontend/README.md b/frontend/README.md index 069f1d5f0..fb2a5e291 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -33,7 +33,7 @@ $ npm run config:defaults:liquid ### 3. Run the Frontend -_Make sure to use Node.js 16.10 and npm 7._ +_Make sure to use Node.js 20.x and npm 9.x or newer._ Install project dependencies and run the frontend server: @@ -70,7 +70,7 @@ Set up the [Mempool backend](../backend/) first, if you haven't already. ### 1. Build the Frontend -_Make sure to use Node.js 16.10 and npm 7._ +_Make sure to use Node.js 20.x and npm 9.x or newer._ Build the frontend: diff --git a/frontend/angular.json b/frontend/angular.json index 190982225..3aa1cb6a8 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -54,6 +54,10 @@ "translation": "src/locale/messages.fr.xlf", "baseHref": "/fr/" }, + "hr": { + "translation": "src/locale/messages.hr.xlf", + "baseHref": "/hr/" + }, "ja": { "translation": "src/locale/messages.ja.xlf", "baseHref": "/ja/" diff --git a/frontend/custom-meta-config.json b/frontend/custom-meta-config.json new file mode 100644 index 000000000..6fa46192a --- /dev/null +++ b/frontend/custom-meta-config.json @@ -0,0 +1,51 @@ +{ + "theme": "contrast", + "enterprise": "meta", + "branding": { + "name": "metaplanet", + "title": "Metaplanet", + "site_id": 21, + "header_img": "/resources/metalogo.svg", + "footer_img": "/resources/metalogo.svg" + }, + "dashboard": { + "widgets": [ + { + "component": "fees", + "mobileOrder": 4 + }, + { + "component": "walletBalance", + "mobileOrder": 1, + "props": { + "wallet": "3350" + } + }, + { + "component": "twitter", + "mobileOrder": 5, + "props": { + "handle": "Metaplanet_JP" + } + }, + { + "component": "wallet", + "mobileOrder": 2, + "props": { + "wallet": "3350", + "period": "all" + } + }, + { + "component": "blocks" + }, + { + "component": "walletTransactions", + "mobileOrder": 3, + "props": { + "wallet": "3350" + } + } + ] + } +} \ No newline at end of file diff --git a/frontend/cypress/e2e/mainnet/mainnet.spec.ts b/frontend/cypress/e2e/mainnet/mainnet.spec.ts index 4403949b6..a1082b769 100644 --- a/frontend/cypress/e2e/mainnet/mainnet.spec.ts +++ b/frontend/cypress/e2e/mainnet/mainnet.spec.ts @@ -543,16 +543,7 @@ describe('Mainnet', () => { } }); - cy.get('.alert').should('be.visible'); - cy.get('.alert').invoke('css', 'width').then((alertWidth) => { - cy.get('.container-xl > :nth-child(3)').invoke('css', 'width').should('equal', alertWidth); - }); - - cy.get('.btn-warning').then(getRectangle).then((rectA) => { - cy.get('.alert').then(getRectangle).then((rectB) => { - expect(areOverlapping(rectA, rectB), 'Confirmations box and RBF alert are overlapping').to.be.false; - }); - }); + cy.get('.alert-replaced').should('be.visible'); }); it('shows RBF transactions properly (desktop)', () => { diff --git a/frontend/cypress/fixtures/mainnet_mempoolInfo.json b/frontend/cypress/fixtures/mainnet_mempoolInfo.json index 5c41bd4dd..584364e9a 100644 --- a/frontend/cypress/fixtures/mainnet_mempoolInfo.json +++ b/frontend/cypress/fixtures/mainnet_mempoolInfo.json @@ -750,7 +750,7 @@ }, "backendInfo": { "hostname": "node205.tk7.mempool.space", - "version": "3.0.0-dev", + "version": "3.1.0-dev", "gitCommit": "abbc8a134", "lightning": false }, diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d164bd869..a27bffcb4 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "mempool-frontend", - "version": "3.0.0-dev", + "version": "3.1.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mempool-frontend", - "version": "3.0.0-dev", + "version": "3.1.0-dev", "license": "GNU Affero General Public License v3.0", "dependencies": { "@angular-devkit/build-angular": "^17.3.1", @@ -34,7 +34,7 @@ "clipboard": "^2.0.11", "domino": "^2.1.6", "echarts": "~5.5.0", - "esbuild": "^0.23.0", + "esbuild": "^0.24.0", "lightweight-charts": "~3.8.0", "ngx-echarts": "~17.2.0", "ngx-infinite-scroll": "^17.0.0", @@ -42,7 +42,7 @@ "rxjs": "~7.8.1", "tinyify": "^4.0.0", "tlite": "^0.1.9", - "tslib": "~2.6.0", + "tslib": "~2.8.0", "zone.js": "~0.14.4" }, "devDependencies": { @@ -51,7 +51,7 @@ "@types/node": "^18.11.9", "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.4.0", - "browser-sync": "^3.0.0", + "browser-sync": "^3.0.3", "eslint": "^8.57.0", "http-proxy-middleware": "~2.0.6", "prettier": "^3.0.0", @@ -62,7 +62,7 @@ "optionalDependencies": { "@cypress/schematic": "^2.5.0", "@types/cypress": "^1.1.3", - "cypress": "^13.13.0", + "cypress": "^13.15.0", "cypress-fail-on-console-error": "~5.1.0", "cypress-wait-until": "^2.0.1", "mock-socket": "~9.3.1", @@ -699,6 +699,11 @@ "node": ">=10" } }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, "node_modules/@angular-devkit/build-webpack": { "version": "0.1703.1", "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1703.1.tgz", @@ -3108,9 +3113,9 @@ } }, "node_modules/@cypress/request": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", - "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.5.tgz", + "integrity": "sha512-v+XHd9XmWbufxF1/bTaVm2yhbxY+TB4YtWRqF2zaXBlDNMkls34KiATz0AVDLavL3iB6bQk9/7n3oY1EoLSWGA==", "optional": true, "dependencies": { "aws-sign2": "~0.7.0", @@ -3119,14 +3124,14 @@ "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", + "form-data": "~4.0.0", + "http-signature": "~1.4.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "6.10.4", + "qs": "6.13.0", "safe-buffer": "^5.1.2", "tough-cookie": "^4.1.3", "tunnel-agent": "^0.6.0", @@ -3196,9 +3201,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", - "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", "cpu": [ "ppc64" ], @@ -3211,9 +3216,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", - "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", "cpu": [ "arm" ], @@ -3226,9 +3231,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", - "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", "cpu": [ "arm64" ], @@ -3241,9 +3246,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", - "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", "cpu": [ "x64" ], @@ -3256,9 +3261,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", - "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", "cpu": [ "arm64" ], @@ -3271,9 +3276,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", - "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", "cpu": [ "x64" ], @@ -3286,9 +3291,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", - "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", "cpu": [ "arm64" ], @@ -3301,9 +3306,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", - "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", "cpu": [ "x64" ], @@ -3316,9 +3321,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", - "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", "cpu": [ "arm" ], @@ -3331,9 +3336,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", - "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", "cpu": [ "arm64" ], @@ -3346,9 +3351,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", - "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", "cpu": [ "ia32" ], @@ -3361,9 +3366,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", - "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", "cpu": [ "loong64" ], @@ -3376,9 +3381,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", - "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", "cpu": [ "mips64el" ], @@ -3391,9 +3396,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", - "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", "cpu": [ "ppc64" ], @@ -3406,9 +3411,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", - "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", "cpu": [ "riscv64" ], @@ -3421,9 +3426,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", - "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", "cpu": [ "s390x" ], @@ -3436,9 +3441,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", - "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", "cpu": [ "x64" ], @@ -3451,9 +3456,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", - "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", "cpu": [ "x64" ], @@ -3466,9 +3471,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", - "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", "cpu": [ "arm64" ], @@ -3481,9 +3486,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", - "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", "cpu": [ "x64" ], @@ -3496,9 +3501,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", - "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", "cpu": [ "x64" ], @@ -3511,9 +3516,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", - "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", "cpu": [ "arm64" ], @@ -3526,9 +3531,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", - "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", "cpu": [ "ia32" ], @@ -3541,9 +3546,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", - "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", "cpu": [ "x64" ], @@ -4308,9 +4313,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", - "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", + "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", "cpu": [ "arm" ], @@ -4320,9 +4325,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", - "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", + "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", "cpu": [ "arm64" ], @@ -4332,9 +4337,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", - "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", + "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", "cpu": [ "arm64" ], @@ -4344,9 +4349,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", - "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", + "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", "cpu": [ "x64" ], @@ -4356,9 +4361,21 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", - "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", + "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", + "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", "cpu": [ "arm" ], @@ -4368,9 +4385,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", - "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", + "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", "cpu": [ "arm64" ], @@ -4380,9 +4397,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", - "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", + "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", "cpu": [ "arm64" ], @@ -4391,10 +4408,22 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", + "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", - "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", + "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", "cpu": [ "riscv64" ], @@ -4403,10 +4432,22 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", + "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", - "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", + "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", "cpu": [ "x64" ], @@ -4416,9 +4457,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", - "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", + "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", "cpu": [ "x64" ], @@ -4428,9 +4469,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", - "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", + "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", "cpu": [ "arm64" ], @@ -4440,9 +4481,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", - "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", + "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", "cpu": [ "ia32" ], @@ -4452,9 +4493,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", - "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", + "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", "cpu": [ "x64" ], @@ -4759,9 +4800,9 @@ "devOptional": true }, "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "devOptional": true, "dependencies": { "@types/node": "*" @@ -4796,9 +4837,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, "node_modules/@types/express": { "version": "4.17.13", @@ -5792,9 +5833,9 @@ } }, "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", "optional": true }, "node_modules/axios": { @@ -6014,9 +6055,9 @@ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -6026,7 +6067,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -6060,20 +6101,6 @@ "node": ">= 0.8" } }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/bonjour-service": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", @@ -6182,13 +6209,13 @@ } }, "node_modules/browser-sync": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.2.tgz", - "integrity": "sha512-PC9c7aWJFVR4IFySrJxOqLwB9ENn3/TaXCXtAa0SzLwocLN3qMjN+IatbjvtCX92BjNXsY6YWg9Eb7F3Wy255g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.3.tgz", + "integrity": "sha512-91hoBHKk1C4pGeD+oE9Ld222k2GNQEAsI5AElqR8iLLWNrmZR2LPP8B0h8dpld9u7kro5IEUB3pUb0DJ3n1cRQ==", "devOptional": true, "dependencies": { - "browser-sync-client": "^3.0.2", - "browser-sync-ui": "^3.0.2", + "browser-sync-client": "^3.0.3", + "browser-sync-ui": "^3.0.3", "bs-recipes": "1.3.4", "chalk": "4.1.2", "chokidar": "^3.5.1", @@ -6202,15 +6229,15 @@ "fs-extra": "3.0.1", "http-proxy": "^1.18.1", "immutable": "^3", - "micromatch": "^4.0.2", + "micromatch": "^4.0.8", "opn": "5.3.0", "portscanner": "2.2.0", "raw-body": "^2.3.2", "resp-modifier": "6.0.2", "rx": "4.1.0", - "send": "0.16.2", - "serve-index": "1.9.1", - "serve-static": "1.13.2", + "send": "^0.19.0", + "serve-index": "^1.9.1", + "serve-static": "^1.16.2", "server-destroy": "1.0.1", "socket.io": "^4.4.1", "ua-parser-js": "^1.0.33", @@ -6224,9 +6251,9 @@ } }, "node_modules/browser-sync-client": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.2.tgz", - "integrity": "sha512-tBWdfn9L0wd2Pjuz/NWHtNEKthVb1Y67vg8/qyGNtCqetNz5lkDkFnrsx5UhPNPYUO8vci50IWC/BhYaQskDiQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.3.tgz", + "integrity": "sha512-TOEXaMgYNjBYIcmX5zDlOdjEqCeCN/d7opf/fuyUD/hhGVCfP54iQIDhENCi012AqzYZm3BvuFl57vbwSTwkSQ==", "devOptional": true, "dependencies": { "etag": "1.8.1", @@ -6238,9 +6265,9 @@ } }, "node_modules/browser-sync-ui": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.2.tgz", - "integrity": "sha512-V3FwWAI+abVbFLTyJjXJlCMBwjc3GXf/BPGfwO2fMFACWbIGW9/4SrBOFYEOOtqzCjQE0Di+U3VIb7eES4omNA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.3.tgz", + "integrity": "sha512-FcGWo5lP5VodPY6O/f4pXQy5FFh4JK0f2/fTBsp0Lx1NtyBWs/IfPPJbW8m1ujTW/2r07oUXKTF2LYZlCZktjw==", "devOptional": true, "dependencies": { "async-each-series": "0.1.1", @@ -6385,30 +6412,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "devOptional": true }, - "node_modules/browser-sync/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/browser-sync/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "devOptional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/browser-sync/node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", - "devOptional": true - }, "node_modules/browser-sync/node_modules/fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", @@ -6429,27 +6432,6 @@ "node": ">=8" } }, - "node_modules/browser-sync/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "devOptional": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/browser-sync/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "devOptional": true - }, "node_modules/browser-sync/node_modules/jsonfile": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", @@ -6459,75 +6441,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/browser-sync/node_modules/mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "devOptional": true, - "bin": { - "mime": "cli.js" - } - }, - "node_modules/browser-sync/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true - }, - "node_modules/browser-sync/node_modules/send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "devOptional": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/browser-sync/node_modules/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "devOptional": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/browser-sync/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "devOptional": true - }, - "node_modules/browser-sync/node_modules/statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "devOptional": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/browser-sync/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7668,9 +7581,9 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "engines": { "node": ">= 0.6" } @@ -8040,13 +7953,13 @@ "peer": true }, "node_modules/cypress": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.13.0.tgz", - "integrity": "sha512-ou/MQUDq4tcDJI2FsPaod2FZpex4kpIK43JJlcBgWrX8WX7R/05ZxGTuxedOuZBfxjZxja+fbijZGyxiLP6CFA==", + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.15.0.tgz", + "integrity": "sha512-53aO7PwOfi604qzOkCSzNlWquCynLlKE/rmmpSPcziRH6LNfaDUAklQT6WJIsD8ywxlIy+uVZsnTMCCQVd2kTw==", "hasInstallScript": true, "optional": true, "dependencies": { - "@cypress/request": "^3.0.0", + "@cypress/request": "^3.0.4", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", @@ -8805,9 +8718,9 @@ "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==" }, "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "version": "6.5.7", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", + "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -8879,9 +8792,9 @@ } }, "node_modules/engine.io": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.1.tgz", - "integrity": "sha512-mGqhI+D7YxS9KJMppR6Iuo37Ed3abhU8NdfgSvJSDUafQutrN+sPTncJYTyM9+tkhSmWodKtVYGPPHyXJEwEQA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", "devOptional": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -8889,98 +8802,47 @@ "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.1.0", - "ws": "~8.11.0" + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/engine.io-client": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", - "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.1.tgz", + "integrity": "sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw==", "devOptional": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.11.0", - "xmlhttprequest-ssl": "~2.0.0" - } - }, - "node_modules/engine.io-client/node_modules/engine.io-parser": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", - "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", - "devOptional": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-client/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "devOptional": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.1.1" } }, "node_modules/engine.io-parser": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.1.0.tgz", - "integrity": "sha512-enySgNiK5tyZFynt3z7iqBR+Bto9EVVVvDFuTT0ioHCGbzirZVGDGiQjZzEp8hWl6hd5FSVytJGuScX1C1C35w==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "devOptional": true, "engines": { "node": ">=10.0.0" } }, "node_modules/engine.io/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "devOptional": true, "engines": { "node": ">= 0.6" } }, - "node_modules/engine.io/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "devOptional": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", @@ -9205,9 +9067,9 @@ } }, "node_modules/esbuild": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", - "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -9216,30 +9078,30 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.0", - "@esbuild/android-arm": "0.23.0", - "@esbuild/android-arm64": "0.23.0", - "@esbuild/android-x64": "0.23.0", - "@esbuild/darwin-arm64": "0.23.0", - "@esbuild/darwin-x64": "0.23.0", - "@esbuild/freebsd-arm64": "0.23.0", - "@esbuild/freebsd-x64": "0.23.0", - "@esbuild/linux-arm": "0.23.0", - "@esbuild/linux-arm64": "0.23.0", - "@esbuild/linux-ia32": "0.23.0", - "@esbuild/linux-loong64": "0.23.0", - "@esbuild/linux-mips64el": "0.23.0", - "@esbuild/linux-ppc64": "0.23.0", - "@esbuild/linux-riscv64": "0.23.0", - "@esbuild/linux-s390x": "0.23.0", - "@esbuild/linux-x64": "0.23.0", - "@esbuild/netbsd-x64": "0.23.0", - "@esbuild/openbsd-arm64": "0.23.0", - "@esbuild/openbsd-x64": "0.23.0", - "@esbuild/sunos-x64": "0.23.0", - "@esbuild/win32-arm64": "0.23.0", - "@esbuild/win32-ia32": "0.23.0", - "@esbuild/win32-x64": "0.23.0" + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" } }, "node_modules/esbuild-wasm": { @@ -9870,36 +9732,36 @@ "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -9918,6 +9780,14 @@ "ms": "2.0.0" } }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -9934,20 +9804,6 @@ "node": ">= 0.8" } }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -10172,12 +10028,12 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -10196,6 +10052,14 @@ "ms": "2.0.0" } }, + "node_modules/finalhandler/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -10335,17 +10199,17 @@ } }, "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "optional": true, "dependencies": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" } }, "node_modules/forwarded": { @@ -10987,14 +10851,14 @@ } }, "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", "optional": true, "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", - "sshpk": "^1.14.1" + "sshpk": "^1.18.0" }, "engines": { "node": ">=0.10" @@ -12662,9 +12526,12 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -12688,12 +12555,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" @@ -13382,9 +13249,9 @@ "optional": true }, "node_modules/nise/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "optional": true, "dependencies": { "isarray": "0.0.1" @@ -13669,9 +13536,12 @@ } }, "node_modules/object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14185,9 +14055,9 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, "node_modules/path-type": { "version": "4.0.0", @@ -14761,12 +14631,11 @@ } }, "node_modules/qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "optional": true, + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -15222,11 +15091,11 @@ } }, "node_modules/rollup": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", - "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", + "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.6" }, "bin": { "rollup": "dist/bin/rollup" @@ -15236,19 +15105,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.13.0", - "@rollup/rollup-android-arm64": "4.13.0", - "@rollup/rollup-darwin-arm64": "4.13.0", - "@rollup/rollup-darwin-x64": "4.13.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", - "@rollup/rollup-linux-arm64-gnu": "4.13.0", - "@rollup/rollup-linux-arm64-musl": "4.13.0", - "@rollup/rollup-linux-riscv64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-musl": "4.13.0", - "@rollup/rollup-win32-arm64-msvc": "4.13.0", - "@rollup/rollup-win32-ia32-msvc": "4.13.0", - "@rollup/rollup-win32-x64-msvc": "4.13.0", + "@rollup/rollup-android-arm-eabi": "4.24.0", + "@rollup/rollup-android-arm64": "4.24.0", + "@rollup/rollup-darwin-arm64": "4.24.0", + "@rollup/rollup-darwin-x64": "4.24.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", + "@rollup/rollup-linux-arm-musleabihf": "4.24.0", + "@rollup/rollup-linux-arm64-gnu": "4.24.0", + "@rollup/rollup-linux-arm64-musl": "4.24.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", + "@rollup/rollup-linux-riscv64-gnu": "4.24.0", + "@rollup/rollup-linux-s390x-gnu": "4.24.0", + "@rollup/rollup-linux-x64-gnu": "4.24.0", + "@rollup/rollup-linux-x64-musl": "4.24.0", + "@rollup/rollup-win32-arm64-msvc": "4.24.0", + "@rollup/rollup-win32-ia32-msvc": "4.24.0", + "@rollup/rollup-win32-x64-msvc": "4.24.0", "fsevents": "~2.3.2" } }, @@ -15472,9 +15344,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -15613,19 +15485,27 @@ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/server-destroy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", @@ -15717,13 +15597,17 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15895,62 +15779,42 @@ } }, "node_modules/socket.io": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.1.tgz", - "integrity": "sha512-W+utHys2w//dhFjy7iQQu9sGd3eokCjGbl2r59tyLqNiJJBdIebn3GAKEXBr3osqHTObJi2die/25bCx2zsaaw==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", + "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", "devOptional": true, "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.0", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/socket.io-adapter": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", - "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", "devOptional": true, "dependencies": { - "ws": "~8.11.0" - } - }, - "node_modules/socket.io-adapter/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "devOptional": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "debug": "~4.3.4", + "ws": "~8.17.1" } }, "node_modules/socket.io-client": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz", - "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.0.tgz", + "integrity": "sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw==", "devOptional": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.5.2", + "engine.io-client": "~6.6.1", "socket.io-parser": "~4.2.4" }, "engines": { @@ -16161,9 +16025,9 @@ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" }, "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "optional": true, "dependencies": { "asn1": "~0.2.3", @@ -16757,9 +16621,9 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "optional": true, "dependencies": { "psl": "^1.1.33", @@ -16925,9 +16789,9 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/tuf-js": { "version": "2.2.0", @@ -17821,30 +17685,16 @@ } }, "node_modules/wait-on/node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "optional": true, "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "node_modules/wait-on/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/wait-on/node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -18298,9 +18148,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "engines": { "node": ">=10.0.0" }, @@ -18326,9 +18176,9 @@ } }, "node_modules/xmlhttprequest-ssl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", - "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.1.tgz", + "integrity": "sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g==", "devOptional": true, "engines": { "node": ">=0.4.0" @@ -18849,6 +18699,11 @@ "requires": { "lru-cache": "^6.0.0" } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -20493,9 +20348,9 @@ } }, "@cypress/request": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", - "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.5.tgz", + "integrity": "sha512-v+XHd9XmWbufxF1/bTaVm2yhbxY+TB4YtWRqF2zaXBlDNMkls34KiATz0AVDLavL3iB6bQk9/7n3oY1EoLSWGA==", "optional": true, "requires": { "aws-sign2": "~0.7.0", @@ -20504,14 +20359,14 @@ "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", + "form-data": "~4.0.0", + "http-signature": "~1.4.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "6.10.4", + "qs": "6.13.0", "safe-buffer": "^5.1.2", "tough-cookie": "^4.1.3", "tunnel-agent": "^0.6.0", @@ -20572,147 +20427,147 @@ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==" }, "@esbuild/aix-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", - "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", "optional": true }, "@esbuild/android-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", - "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", "optional": true }, "@esbuild/android-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", - "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", "optional": true }, "@esbuild/android-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", - "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", - "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", "optional": true }, "@esbuild/darwin-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", - "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", - "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", - "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", "optional": true }, "@esbuild/linux-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", - "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", "optional": true }, "@esbuild/linux-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", - "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", "optional": true }, "@esbuild/linux-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", - "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", "optional": true }, "@esbuild/linux-loong64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", - "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", - "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", - "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", - "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", "optional": true }, "@esbuild/linux-s390x": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", - "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", "optional": true }, "@esbuild/linux-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", - "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", - "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", "optional": true }, "@esbuild/openbsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", - "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", - "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", "optional": true }, "@esbuild/sunos-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", - "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", "optional": true }, "@esbuild/win32-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", - "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", "optional": true }, "@esbuild/win32-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", - "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", "optional": true }, "@esbuild/win32-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", - "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", "optional": true }, "@eslint-community/eslint-utils": { @@ -21256,81 +21111,99 @@ "peer": true }, "@rollup/rollup-android-arm-eabi": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", - "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", + "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", "optional": true }, "@rollup/rollup-android-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", - "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", + "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", "optional": true }, "@rollup/rollup-darwin-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", - "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", + "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", "optional": true }, "@rollup/rollup-darwin-x64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", - "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", + "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", "optional": true }, "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", - "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", + "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", + "optional": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", + "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", "optional": true }, "@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", - "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", + "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", "optional": true }, "@rollup/rollup-linux-arm64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", - "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", + "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", + "optional": true + }, + "@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", + "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", "optional": true }, "@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", - "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", + "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", + "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", "optional": true }, "@rollup/rollup-linux-x64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", - "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", + "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", "optional": true }, "@rollup/rollup-linux-x64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", - "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", + "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", "optional": true }, "@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", - "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", + "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", "optional": true }, "@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", - "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", + "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", "optional": true }, "@rollup/rollup-win32-x64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", - "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", + "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", "optional": true }, "@schematics/angular": { @@ -21598,9 +21471,9 @@ "devOptional": true }, "@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "devOptional": true, "requires": { "@types/node": "*" @@ -21634,9 +21507,9 @@ } }, "@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, "@types/express": { "version": "4.17.13", @@ -22396,9 +22269,9 @@ "optional": true }, "aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", "optional": true }, "axios": { @@ -22572,9 +22445,9 @@ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "requires": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -22584,7 +22457,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -22610,14 +22483,6 @@ "requires": { "ee-first": "1.1.1" } - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } } } }, @@ -22707,13 +22572,13 @@ } }, "browser-sync": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.2.tgz", - "integrity": "sha512-PC9c7aWJFVR4IFySrJxOqLwB9ENn3/TaXCXtAa0SzLwocLN3qMjN+IatbjvtCX92BjNXsY6YWg9Eb7F3Wy255g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.3.tgz", + "integrity": "sha512-91hoBHKk1C4pGeD+oE9Ld222k2GNQEAsI5AElqR8iLLWNrmZR2LPP8B0h8dpld9u7kro5IEUB3pUb0DJ3n1cRQ==", "devOptional": true, "requires": { - "browser-sync-client": "^3.0.2", - "browser-sync-ui": "^3.0.2", + "browser-sync-client": "^3.0.3", + "browser-sync-ui": "^3.0.3", "bs-recipes": "1.3.4", "chalk": "4.1.2", "chokidar": "^3.5.1", @@ -22727,15 +22592,15 @@ "fs-extra": "3.0.1", "http-proxy": "^1.18.1", "immutable": "^3", - "micromatch": "^4.0.2", + "micromatch": "^4.0.8", "opn": "5.3.0", "portscanner": "2.2.0", "raw-body": "^2.3.2", "resp-modifier": "6.0.2", "rx": "4.1.0", - "send": "0.16.2", - "serve-index": "1.9.1", - "serve-static": "1.13.2", + "send": "^0.19.0", + "serve-index": "^1.9.1", + "serve-static": "^1.16.2", "server-destroy": "1.0.1", "socket.io": "^4.4.1", "ua-parser-js": "^1.0.33", @@ -22787,27 +22652,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "devOptional": true }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "devOptional": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", - "devOptional": true - }, "fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", @@ -22825,24 +22669,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "devOptional": true }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "devOptional": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "devOptional": true - }, "jsonfile": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", @@ -22852,63 +22678,6 @@ "graceful-fs": "^4.1.6" } }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "devOptional": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "devOptional": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "devOptional": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "devOptional": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "devOptional": true - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -22971,9 +22740,9 @@ } }, "browser-sync-client": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.2.tgz", - "integrity": "sha512-tBWdfn9L0wd2Pjuz/NWHtNEKthVb1Y67vg8/qyGNtCqetNz5lkDkFnrsx5UhPNPYUO8vci50IWC/BhYaQskDiQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.3.tgz", + "integrity": "sha512-TOEXaMgYNjBYIcmX5zDlOdjEqCeCN/d7opf/fuyUD/hhGVCfP54iQIDhENCi012AqzYZm3BvuFl57vbwSTwkSQ==", "devOptional": true, "requires": { "etag": "1.8.1", @@ -22982,9 +22751,9 @@ } }, "browser-sync-ui": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.2.tgz", - "integrity": "sha512-V3FwWAI+abVbFLTyJjXJlCMBwjc3GXf/BPGfwO2fMFACWbIGW9/4SrBOFYEOOtqzCjQE0Di+U3VIb7eES4omNA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.3.tgz", + "integrity": "sha512-FcGWo5lP5VodPY6O/f4pXQy5FFh4JK0f2/fTBsp0Lx1NtyBWs/IfPPJbW8m1ujTW/2r07oUXKTF2LYZlCZktjw==", "devOptional": true, "requires": { "async-each-series": "0.1.1", @@ -23854,9 +23623,9 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" }, "cookie-signature": { "version": "1.0.6", @@ -24127,12 +23896,12 @@ "peer": true }, "cypress": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.13.0.tgz", - "integrity": "sha512-ou/MQUDq4tcDJI2FsPaod2FZpex4kpIK43JJlcBgWrX8WX7R/05ZxGTuxedOuZBfxjZxja+fbijZGyxiLP6CFA==", + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.15.0.tgz", + "integrity": "sha512-53aO7PwOfi604qzOkCSzNlWquCynLlKE/rmmpSPcziRH6LNfaDUAklQT6WJIsD8ywxlIy+uVZsnTMCCQVd2kTw==", "optional": true, "requires": { - "@cypress/request": "^3.0.0", + "@cypress/request": "^3.0.4", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", @@ -24723,9 +24492,9 @@ "integrity": "sha512-XzWNH4ZSa9BwVUQSDorPWAUQ5WGuYz7zJUNpNif40zFCiCl20t8zgylmreNmn26h5kiyw2lg7RfTmeMBsDklqg==" }, "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "version": "6.5.7", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", + "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", "requires": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -24792,9 +24561,9 @@ } }, "engine.io": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.1.tgz", - "integrity": "sha512-mGqhI+D7YxS9KJMppR6Iuo37Ed3abhU8NdfgSvJSDUafQutrN+sPTncJYTyM9+tkhSmWodKtVYGPPHyXJEwEQA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", "devOptional": true, "requires": { "@types/cookie": "^0.4.1", @@ -24802,60 +24571,38 @@ "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.1.0", - "ws": "~8.11.0" + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" }, "dependencies": { "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "devOptional": true - }, - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "devOptional": true, - "requires": {} } } }, "engine.io-client": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", - "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.1.tgz", + "integrity": "sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw==", "devOptional": true, "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.11.0", - "xmlhttprequest-ssl": "~2.0.0" - }, - "dependencies": { - "engine.io-parser": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", - "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", - "devOptional": true - }, - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "devOptional": true, - "requires": {} - } + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.1.1" } }, "engine.io-parser": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.1.0.tgz", - "integrity": "sha512-enySgNiK5tyZFynt3z7iqBR+Bto9EVVVvDFuTT0ioHCGbzirZVGDGiQjZzEp8hWl6hd5FSVytJGuScX1C1C35w==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "devOptional": true }, "enhanced-resolve": { @@ -25044,34 +24791,34 @@ } }, "esbuild": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", - "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "requires": { - "@esbuild/aix-ppc64": "0.23.0", - "@esbuild/android-arm": "0.23.0", - "@esbuild/android-arm64": "0.23.0", - "@esbuild/android-x64": "0.23.0", - "@esbuild/darwin-arm64": "0.23.0", - "@esbuild/darwin-x64": "0.23.0", - "@esbuild/freebsd-arm64": "0.23.0", - "@esbuild/freebsd-x64": "0.23.0", - "@esbuild/linux-arm": "0.23.0", - "@esbuild/linux-arm64": "0.23.0", - "@esbuild/linux-ia32": "0.23.0", - "@esbuild/linux-loong64": "0.23.0", - "@esbuild/linux-mips64el": "0.23.0", - "@esbuild/linux-ppc64": "0.23.0", - "@esbuild/linux-riscv64": "0.23.0", - "@esbuild/linux-s390x": "0.23.0", - "@esbuild/linux-x64": "0.23.0", - "@esbuild/netbsd-x64": "0.23.0", - "@esbuild/openbsd-arm64": "0.23.0", - "@esbuild/openbsd-x64": "0.23.0", - "@esbuild/sunos-x64": "0.23.0", - "@esbuild/win32-arm64": "0.23.0", - "@esbuild/win32-ia32": "0.23.0", - "@esbuild/win32-x64": "0.23.0" + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" } }, "esbuild-wasm": { @@ -25540,36 +25287,36 @@ "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" }, "express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -25585,6 +25332,11 @@ "ms": "2.0.0" } }, + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -25598,14 +25350,6 @@ "ee-first": "1.1.1" } }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -25778,12 +25522,12 @@ } }, "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -25799,6 +25543,11 @@ "ms": "2.0.0" } }, + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -25892,13 +25641,13 @@ "optional": true }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "optional": true, "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, @@ -26360,14 +26109,14 @@ } }, "http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", "optional": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", - "sshpk": "^1.14.1" + "sshpk": "^1.18.0" } }, "https-browserify": { @@ -27591,9 +27340,9 @@ } }, "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" }, "merge-stream": { "version": "2.0.0", @@ -27611,12 +27360,12 @@ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.3", + "picomatch": "^2.3.1" } }, "miller-rabin": { @@ -28156,9 +27905,9 @@ "optional": true }, "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "optional": true, "requires": { "isarray": "0.0.1" @@ -28364,9 +28113,9 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" }, "object-keys": { "version": "1.1.1", @@ -28740,9 +28489,9 @@ } }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, "path-type": { "version": "4.0.0", @@ -29137,12 +28886,11 @@ } }, "qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "optional": true, + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } }, "querystring": { @@ -29495,24 +29243,27 @@ } }, "rollup": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", - "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", + "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", "requires": { - "@rollup/rollup-android-arm-eabi": "4.13.0", - "@rollup/rollup-android-arm64": "4.13.0", - "@rollup/rollup-darwin-arm64": "4.13.0", - "@rollup/rollup-darwin-x64": "4.13.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", - "@rollup/rollup-linux-arm64-gnu": "4.13.0", - "@rollup/rollup-linux-arm64-musl": "4.13.0", - "@rollup/rollup-linux-riscv64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-musl": "4.13.0", - "@rollup/rollup-win32-arm64-msvc": "4.13.0", - "@rollup/rollup-win32-ia32-msvc": "4.13.0", - "@rollup/rollup-win32-x64-msvc": "4.13.0", - "@types/estree": "1.0.5", + "@rollup/rollup-android-arm-eabi": "4.24.0", + "@rollup/rollup-android-arm64": "4.24.0", + "@rollup/rollup-darwin-arm64": "4.24.0", + "@rollup/rollup-darwin-x64": "4.24.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", + "@rollup/rollup-linux-arm-musleabihf": "4.24.0", + "@rollup/rollup-linux-arm64-gnu": "4.24.0", + "@rollup/rollup-linux-arm64-musl": "4.24.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", + "@rollup/rollup-linux-riscv64-gnu": "4.24.0", + "@rollup/rollup-linux-s390x-gnu": "4.24.0", + "@rollup/rollup-linux-x64-gnu": "4.24.0", + "@rollup/rollup-linux-x64-musl": "4.24.0", + "@rollup/rollup-win32-arm64-msvc": "4.24.0", + "@rollup/rollup-win32-ia32-msvc": "4.24.0", + "@rollup/rollup-win32-x64-msvc": "4.24.0", + "@types/estree": "1.0.6", "fsevents": "~2.3.2" } }, @@ -29663,9 +29414,9 @@ } }, "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "requires": { "debug": "2.6.9", "depd": "2.0.0", @@ -29786,14 +29537,21 @@ } }, "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "requires": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" + }, + "dependencies": { + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" + } } }, "server-destroy": { @@ -29869,13 +29627,14 @@ "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==" }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { @@ -29993,47 +29752,39 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, "socket.io": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.1.tgz", - "integrity": "sha512-W+utHys2w//dhFjy7iQQu9sGd3eokCjGbl2r59tyLqNiJJBdIebn3GAKEXBr3osqHTObJi2die/25bCx2zsaaw==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", + "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", "devOptional": true, "requires": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.0", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" } }, "socket.io-adapter": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", - "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", "devOptional": true, "requires": { - "ws": "~8.11.0" - }, - "dependencies": { - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "devOptional": true, - "requires": {} - } + "debug": "~4.3.4", + "ws": "~8.17.1" } }, "socket.io-client": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz", - "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.0.tgz", + "integrity": "sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw==", "devOptional": true, "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.5.2", + "engine.io-client": "~6.6.1", "socket.io-parser": "~4.2.4" } }, @@ -30206,9 +29957,9 @@ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" }, "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "optional": true, "requires": { "asn1": "~0.2.3", @@ -30654,9 +30405,9 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "optional": true, "requires": { "psl": "^1.1.33", @@ -30763,9 +30514,9 @@ } }, "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "tuf-js": { "version": "2.2.0", @@ -31277,27 +31028,16 @@ }, "dependencies": { "axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "optional": true, "requires": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -31612,9 +31352,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "requires": {} }, "xhr2": { @@ -31623,9 +31363,9 @@ "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==" }, "xmlhttprequest-ssl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", - "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.1.tgz", + "integrity": "sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g==", "devOptional": true }, "xtend": { diff --git a/frontend/package.json b/frontend/package.json index 59f0eb39e..6a0d7dc12 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "mempool-frontend", - "version": "3.0.0-dev", + "version": "3.1.0-dev", "description": "Bitcoin mempool visualizer and blockchain explorer backend", "license": "GNU Affero General Public License v3.0", "homepage": "https://mempool.space", @@ -92,10 +92,10 @@ "ngx-infinite-scroll": "^17.0.0", "qrcode": "1.5.1", "rxjs": "~7.8.1", - "esbuild": "^0.23.0", + "esbuild": "^0.24.0", "tinyify": "^4.0.0", "tlite": "^0.1.9", - "tslib": "~2.6.0", + "tslib": "~2.8.0", "zone.js": "~0.14.4" }, "devDependencies": { @@ -105,7 +105,7 @@ "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.4.0", "eslint": "^8.57.0", - "browser-sync": "^3.0.0", + "browser-sync": "^3.0.3", "http-proxy-middleware": "~2.0.6", "prettier": "^3.0.0", "source-map-support": "^0.5.21", @@ -115,7 +115,7 @@ "optionalDependencies": { "@cypress/schematic": "^2.5.0", "@types/cypress": "^1.1.3", - "cypress": "^13.13.0", + "cypress": "^13.15.0", "cypress-fail-on-console-error": "~5.1.0", "cypress-wait-until": "^2.0.1", "mock-socket": "~9.3.1", diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index 8e996953d..d1748312d 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -1,14 +1,15 @@ import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; -import { AppPreloadingStrategy } from './app.preloading-strategy' -import { BlockViewComponent } from './components/block-view/block-view.component'; -import { EightBlocksComponent } from './components/eight-blocks/eight-blocks.component'; -import { MempoolBlockViewComponent } from './components/mempool-block-view/mempool-block-view.component'; -import { ClockComponent } from './components/clock/clock.component'; -import { StatusViewComponent } from './components/status-view/status-view.component'; -import { AddressGroupComponent } from './components/address-group/address-group.component'; -import { TrackerComponent } from './components/tracker/tracker.component'; -import { AccelerateCheckout } from './components/accelerate-checkout/accelerate-checkout.component'; +import { AppPreloadingStrategy } from '@app/app.preloading-strategy' +import { BlockViewComponent } from '@components/block-view/block-view.component'; +import { EightBlocksComponent } from '@components/eight-blocks/eight-blocks.component'; +import { MempoolBlockViewComponent } from '@components/mempool-block-view/mempool-block-view.component'; +import { ClockComponent } from '@components/clock/clock.component'; +import { StatusViewComponent } from '@components/status-view/status-view.component'; +import { AddressGroupComponent } from '@components/address-group/address-group.component'; +import { TrackerComponent } from '@components/tracker/tracker.component'; +import { AccelerateCheckout } from '@components/accelerate-checkout/accelerate-checkout.component'; +import { TrackerGuard } from '@app/route-guards'; const browserWindow = window || {}; // @ts-ignore @@ -21,16 +22,16 @@ let routes: Routes = [ { path: '', pathMatch: 'full', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, { path: '', - loadChildren: () => import('./master-page.module').then(m => m.MasterPageModule), + loadChildren: () => import('@app/master-page.module').then(m => m.MasterPageModule), data: { preload: true }, }, { - path: 'wallet', + path: 'widget/wallet', children: [], component: AddressGroupComponent, data: { @@ -44,7 +45,7 @@ let routes: Routes = [ }, { path: '', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, { @@ -59,12 +60,12 @@ let routes: Routes = [ { path: '', pathMatch: 'full', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, { path: '', - loadChildren: () => import('./master-page.module').then(m => m.MasterPageModule), + loadChildren: () => import('@app/master-page.module').then(m => m.MasterPageModule), data: { preload: true }, }, { @@ -82,7 +83,7 @@ let routes: Routes = [ }, { path: '', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, { @@ -102,16 +103,16 @@ let routes: Routes = [ { path: '', pathMatch: 'full', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, { path: '', - loadChildren: () => import('./master-page.module').then(m => m.MasterPageModule), + loadChildren: () => import('@app/master-page.module').then(m => m.MasterPageModule), data: { preload: true }, }, { - path: 'wallet', + path: 'widget/wallet', children: [], component: AddressGroupComponent, data: { @@ -125,7 +126,7 @@ let routes: Routes = [ }, { path: '', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, { @@ -137,21 +138,22 @@ let routes: Routes = [ { path: '', pathMatch: 'full', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, + { + path: 'tx', + canMatch: [TrackerGuard], + runGuardsAndResolvers: 'always', + loadChildren: () => import('@components/tracker/tracker.module').then(m => m.TrackerModule), + }, { path: '', - loadChildren: () => import('./master-page.module').then(m => m.MasterPageModule), + loadChildren: () => import('@app/master-page.module').then(m => m.MasterPageModule), data: { preload: true }, }, { - path: 'tracker', - data: { networkSpecific: true }, - loadChildren: () => import('./components/tracker/tracker.module').then(m => m.TrackerModule), - }, - { - path: 'wallet', + path: 'widget/wallet', children: [], component: AddressGroupComponent, data: { @@ -163,19 +165,19 @@ let routes: Routes = [ children: [ { path: '', - loadChildren: () => import('./previews.module').then(m => m.PreviewsModule) + loadChildren: () => import('@app/previews.module').then(m => m.PreviewsModule) }, { path: 'testnet', - loadChildren: () => import('./previews.module').then(m => m.PreviewsModule) + loadChildren: () => import('@app/previews.module').then(m => m.PreviewsModule) }, { path: 'testnet4', - loadChildren: () => import('./previews.module').then(m => m.PreviewsModule) + loadChildren: () => import('@app/previews.module').then(m => m.PreviewsModule) }, { path: 'signet', - loadChildren: () => import('./previews.module').then(m => m.PreviewsModule) + loadChildren: () => import('@app/previews.module').then(m => m.PreviewsModule) }, ], }, @@ -210,13 +212,9 @@ let routes: Routes = [ }, { path: '', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, - { - path: '**', - redirectTo: '' - }, ]; if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { @@ -227,16 +225,16 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { { path: '', pathMatch: 'full', - loadChildren: () => import('./liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), + loadChildren: () => import('@app/liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), data: { preload: true }, }, { path: '', - loadChildren: () => import ('./liquid/liquid-master-page.module').then(m => m.LiquidMasterPageModule), + loadChildren: () => import ('@app/liquid/liquid-master-page.module').then(m => m.LiquidMasterPageModule), data: { preload: true }, }, { - path: 'wallet', + path: 'widget/wallet', children: [], component: AddressGroupComponent, data: { @@ -250,7 +248,7 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { }, { path: '', - loadChildren: () => import('./liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), + loadChildren: () => import('@app/liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), data: { preload: true }, }, { @@ -262,16 +260,16 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { { path: '', pathMatch: 'full', - loadChildren: () => import('./liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), + loadChildren: () => import('@app/liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), data: { preload: true }, }, { path: '', - loadChildren: () => import ('./liquid/liquid-master-page.module').then(m => m.LiquidMasterPageModule), + loadChildren: () => import ('@app/liquid/liquid-master-page.module').then(m => m.LiquidMasterPageModule), data: { preload: true }, }, { - path: 'wallet', + path: 'widget/wallet', children: [], component: AddressGroupComponent, data: { @@ -283,11 +281,11 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { children: [ { path: '', - loadChildren: () => import('./previews.module').then(m => m.PreviewsModule) + loadChildren: () => import('@app/previews.module').then(m => m.PreviewsModule) }, { path: 'testnet', - loadChildren: () => import('./previews.module').then(m => m.PreviewsModule) + loadChildren: () => import('@app/previews.module').then(m => m.PreviewsModule) }, ], }, @@ -298,16 +296,19 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { }, { path: '', - loadChildren: () => import('./liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), + loadChildren: () => import('@app/liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), data: { preload: true }, }, - { - path: '**', - redirectTo: '' - }, ]; } +if (!window['isMempoolSpaceBuild']) { + routes.push({ + path: '**', + redirectTo: '' + }); +} + @NgModule({ imports: [RouterModule.forRoot(routes, { initialNavigation: 'enabledBlocking', diff --git a/frontend/src/app/app.constants.ts b/frontend/src/app/app.constants.ts index aaa53b8ba..cef630984 100644 --- a/frontend/src/app/app.constants.ts +++ b/frontend/src/app/app.constants.ts @@ -151,7 +151,7 @@ export const languages: Language[] = [ { code: 'fr', name: 'Français' }, // French // { code: 'gl', name: 'Galego' }, // Galician { code: 'ko', name: '한국어' }, // Korean -// { code: 'hr', name: 'Hrvatski' }, // Croatian + { code: 'hr', name: 'Hrvatski' }, // Croatian // { code: 'id', name: 'Bahasa Indonesia' },// Indonesian { code: 'hi', name: 'हिन्दी' }, // Hindi { code: 'ne', name: 'नेपाली' }, // Nepalese diff --git a/frontend/src/app/app.module.server.ts b/frontend/src/app/app.module.server.ts index 4149fa593..56096891d 100644 --- a/frontend/src/app/app.module.server.ts +++ b/frontend/src/app/app.module.server.ts @@ -2,11 +2,11 @@ import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { NgModule } from '@angular/core'; import { ServerModule } from '@angular/platform-server'; -import { ZONE_SERVICE } from './injection-tokens'; +import { ZONE_SERVICE } from '@app/injection-tokens'; import { AppModule } from './app.module'; -import { AppComponent } from './components/app/app.component'; -import { HttpCacheInterceptor } from './services/http-cache.interceptor'; -import { ZoneService } from './services/zone.service'; +import { AppComponent } from '@components/app/app.component'; +import { HttpCacheInterceptor } from '@app/services/http-cache.interceptor'; +import { ZoneService } from '@app/services/zone.service'; @NgModule({ @@ -20,4 +20,4 @@ import { ZoneService } from './services/zone.service'; ], bootstrap: [AppComponent], }) -export class AppServerModule {} \ No newline at end of file +export class AppServerModule {} diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index 50bbd88b9..1b764c003 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -2,35 +2,38 @@ import { BrowserModule } from '@angular/platform-browser'; import { ModuleWithProviders, NgModule } from '@angular/core'; import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { ZONE_SERVICE } from './injection-tokens'; +import { ZONE_SERVICE } from '@app/injection-tokens'; import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './components/app/app.component'; -import { ElectrsApiService } from './services/electrs-api.service'; -import { StateService } from './services/state.service'; -import { CacheService } from './services/cache.service'; -import { PriceService } from './services/price.service'; -import { EnterpriseService } from './services/enterprise.service'; -import { WebsocketService } from './services/websocket.service'; -import { AudioService } from './services/audio.service'; -import { PreloadService } from './services/preload.service'; -import { SeoService } from './services/seo.service'; -import { OpenGraphService } from './services/opengraph.service'; -import { ZoneService } from './services/zone-shim.service'; -import { SharedModule } from './shared/shared.module'; -import { StorageService } from './services/storage.service'; -import { HttpCacheInterceptor } from './services/http-cache.interceptor'; -import { LanguageService } from './services/language.service'; -import { ThemeService } from './services/theme.service'; -import { FiatShortenerPipe } from './shared/pipes/fiat-shortener.pipe'; -import { FiatCurrencyPipe } from './shared/pipes/fiat-currency.pipe'; -import { ShortenStringPipe } from './shared/pipes/shorten-string-pipe/shorten-string.pipe'; -import { CapAddressPipe } from './shared/pipes/cap-address-pipe/cap-address-pipe'; -import { AppPreloadingStrategy } from './app.preloading-strategy'; -import { ServicesApiServices } from './services/services-api.service'; +import { AppComponent } from '@components/app/app.component'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; +import { OrdApiService } from '@app/services/ord-api.service'; +import { StateService } from '@app/services/state.service'; +import { CacheService } from '@app/services/cache.service'; +import { PriceService } from '@app/services/price.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { AudioService } from '@app/services/audio.service'; +import { PreloadService } from '@app/services/preload.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { ZoneService } from '@app/services/zone-shim.service'; +import { SharedModule } from '@app/shared/shared.module'; +import { StorageService } from '@app/services/storage.service'; +import { HttpCacheInterceptor } from '@app/services/http-cache.interceptor'; +import { LanguageService } from '@app/services/language.service'; +import { ThemeService } from '@app/services/theme.service'; +import { TimeService } from '@app/services/time.service'; +import { FiatShortenerPipe } from '@app/shared/pipes/fiat-shortener.pipe'; +import { FiatCurrencyPipe } from '@app/shared/pipes/fiat-currency.pipe'; +import { ShortenStringPipe } from '@app/shared/pipes/shorten-string-pipe/shorten-string.pipe'; +import { CapAddressPipe } from '@app/shared/pipes/cap-address-pipe/cap-address-pipe'; +import { AppPreloadingStrategy } from '@app/app.preloading-strategy'; +import { ServicesApiServices } from '@app/services/services-api.service'; import { DatePipe } from '@angular/common'; const providers = [ ElectrsApiService, + OrdApiService, StateService, CacheService, PriceService, @@ -42,6 +45,7 @@ const providers = [ EnterpriseService, LanguageService, ThemeService, + TimeService, ShortenStringPipe, FiatShortenerPipe, FiatCurrencyPipe, diff --git a/frontend/src/app/bitcoin-graphs.module.ts b/frontend/src/app/bitcoin-graphs.module.ts index 710743245..f5b1557b1 100644 --- a/frontend/src/app/bitcoin-graphs.module.ts +++ b/frontend/src/app/bitcoin-graphs.module.ts @@ -1,13 +1,13 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { MasterPageComponent } from './components/master-page/master-page.component'; +import { MasterPageComponent } from '@components/master-page/master-page.component'; const routes: Routes = [ { path: '', component: MasterPageComponent, - loadChildren: () => import('./graphs/graphs.module').then(m => m.GraphsModule), + loadChildren: () => import('@app/graphs/graphs.module').then(m => m.GraphsModule), data: { preload: true }, } ]; diff --git a/frontend/src/app/bitcoin.utils.ts b/frontend/src/app/bitcoin.utils.ts index 92d3de7f3..b949cde3c 100644 --- a/frontend/src/app/bitcoin.utils.ts +++ b/frontend/src/app/bitcoin.utils.ts @@ -1,5 +1,5 @@ -import { Transaction, Vin } from './interfaces/electrs.interface'; -import { Hash } from './shared/sha256'; +import { Transaction, Vin } from '@interfaces/electrs.interface'; +import { Hash } from '@app/shared/sha256'; const P2SH_P2WPKH_COST = 21 * 4; // the WU cost for the non-witness part of P2SH-P2WPKH const P2SH_P2WSH_COST = 35 * 4; // the WU cost for the non-witness part of P2SH-P2WSH @@ -135,7 +135,7 @@ export function parseMultisigScript(script: string): void | { m: number, n: numb return; } const opN = ops.pop(); - if (!opN.startsWith('OP_PUSHNUM_')) { + if (opN !== 'OP_0' && !opN.startsWith('OP_PUSHNUM_')) { return; } const n = parseInt(opN.match(/[0-9]+/)[0], 10); @@ -152,7 +152,7 @@ export function parseMultisigScript(script: string): void | { m: number, n: numb } } const opM = ops.pop(); - if (!opM.startsWith('OP_PUSHNUM_')) { + if (opM !== 'OP_0' && !opM.startsWith('OP_PUSHNUM_')) { return; } const m = parseInt(opM.match(/[0-9]+/)[0], 10); @@ -303,4 +303,4 @@ export async function calcScriptHash$(script: string): Promise { return hashArray .map((bytes) => bytes.toString(16).padStart(2, '0')) .join(''); -} \ No newline at end of file +} diff --git a/frontend/src/app/components/about/about-sponsors.component.ts b/frontend/src/app/components/about/about-sponsors.component.ts index 6a47c3bd4..f42944173 100644 --- a/frontend/src/app/components/about/about-sponsors.component.ts +++ b/frontend/src/app/components/about/about-sponsors.component.ts @@ -1,5 +1,5 @@ import { Component, Input } from '@angular/core'; -import { EnterpriseService } from '../../services/enterprise.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; @Component({ selector: 'app-about-sponsors', diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 41c0ce47f..40d6e1914 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -53,7 +53,7 @@ Spiral - + Blockstream - + + + Unchained - - - - - - - - Gemini + + + Bitkey Bull Bitcoin - + @@ -191,12 +188,30 @@ Exodus + + + + + + + + Gemini + + + + Leather + + + + + Taproot Wizards +
-
+

Whale Sponsors

@@ -435,7 +450,7 @@ Trademark Notice

- The Mempool Open Source Project®, Mempool Accelerator™, Mempool Enterprise®, Mempool Liquidity™, mempool.space®, Be your own explorer™, Explore the full Bitcoin ecosystem®, Mempool Goggles™, the mempool logo, the mempool Square logo, the mempool Blocks logo, the mempool Blocks 3 | 2 logo, the mempool.space Vertical Logo, and the mempool.space Horizontal logo are either registered trademarks or trademarks of Mempool Space K.K in Japan, the United States, and/or other countries. + The Mempool Open Source Project®, Mempool Accelerator™, Mempool Enterprise®, Mempool Liquidity™, mempool.space®, Be your own explorer™, Explore the full Bitcoin ecosystem®, Mempool Goggles™, the mempool Logo, the mempool Square Logo, the mempool block visualization Logo, the mempool Blocks Logo, the mempool transaction Logo, the mempool Blocks 3 | 2 Logo, the mempool research Logo, the mempool.space Vertical Logo, and the mempool.space Horizontal Logo are either registered trademarks or trademarks of Mempool Space K.K in Japan, the United States, and/or other countries.

While our software is available under an open source software license, the copyright license does not include an implied right or license to use our trademarks. See our Trademark Policy and Guidelines for more details, published on <https://mempool.space/trademark-policy>. diff --git a/frontend/src/app/components/about/about.component.scss b/frontend/src/app/components/about/about.component.scss index a360e180c..6a76bf299 100644 --- a/frontend/src/app/components/about/about.component.scss +++ b/frontend/src/app/components/about/about.component.scss @@ -13,8 +13,6 @@ .image.not-rounded { border-radius: 0; - width: 60px; - height: 60px; } .intro { @@ -94,6 +92,13 @@ } } + .whale-sponsor { + img { + width: 70px; + height: 70px; + } + } + .alliances { margin-bottom: 100px; a { @@ -158,9 +163,8 @@ margin: 40px 29px 10px; &.image.coldcard { border-radius: 0; - width: auto; - max-height: 50px; - margin: 40px 29px 14px 29px; + height: auto; + margin: 20px 29px 20px; } } } @@ -254,3 +258,12 @@ width: 64px; height: 64px; } + +.enterprise-sponsor { + .wrapper { + display: flex; + flex-wrap: wrap; + justify-content: center; + max-width: 800px; + } +} \ No newline at end of file diff --git a/frontend/src/app/components/about/about.component.ts b/frontend/src/app/components/about/about.component.ts index 44bee5828..5963c371c 100644 --- a/frontend/src/app/components/about/about.component.ts +++ b/frontend/src/app/components/about/about.component.ts @@ -1,16 +1,16 @@ import { ChangeDetectionStrategy, Component, ElementRef, Inject, LOCALE_ID, OnInit, ViewChild } from '@angular/core'; -import { WebsocketService } from '../../services/websocket.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { StateService } from '../../services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { StateService } from '@app/services/state.service'; import { Observable } from 'rxjs'; -import { ApiService } from '../../services/api.service'; -import { IBackendInfo } from '../../interfaces/websocket.interface'; +import { ApiService } from '@app/services/api.service'; +import { IBackendInfo } from '@interfaces/websocket.interface'; import { Router, ActivatedRoute } from '@angular/router'; import { map, share, tap } from 'rxjs/operators'; -import { ITranslators } from '../../interfaces/node-api.interface'; +import { ITranslators } from '@interfaces/node-api.interface'; import { DOCUMENT } from '@angular/common'; -import { EnterpriseService } from '../../services/enterprise.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; @Component({ selector: 'app-about', diff --git a/frontend/src/app/components/about/about.module.ts b/frontend/src/app/components/about/about.module.ts index 7e8ed42d0..8324876b1 100644 --- a/frontend/src/app/components/about/about.module.ts +++ b/frontend/src/app/components/about/about.module.ts @@ -1,9 +1,9 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { AboutComponent } from './about.component'; -import { AboutSponsorsComponent } from './about-sponsors.component'; -import { SharedModule } from '../../shared/shared.module'; +import { AboutComponent } from '@components/about/about.component'; +import { AboutSponsorsComponent } from '@components/about/about-sponsors.component'; +import { SharedModule } from '@app/shared/shared.module'; const routes: Routes = [ { diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html index 82391dc89..df67de65c 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html @@ -389,21 +389,29 @@

}
- @if (canPayWithCashapp || canPayWithApplePay) { + @if (canPayWithCashapp || canPayWithApplePay || canPayWithGooglePay) {

OR

} } - @if (canPayWithCashapp || canPayWithApplePay) { + @if (canPayWithCashapp || canPayWithApplePay || canPayWithGooglePay) {

Pay  with

@if (canPayWithCashapp) { } @if (canPayWithApplePay) { - @if (canPayWithCashapp) {
} - + @if (canPayWithCashapp) { } +
+ +
+ } + @if (canPayWithGooglePay) { + @if (canPayWithCashapp || canPayWithApplePay) { } +
+ +
}
} @@ -427,7 +435,7 @@
- } @else if (step === 'cashapp' || step === 'applepay') { + } @else if (step === 'cashapp' || step === 'applepay' || step === 'googlepay') {
@@ -443,7 +451,7 @@
- @if (step === 'cashapp' && !loadingCashapp || step === 'applepay' && !loadingApplePay) { + @if (step === 'cashapp' && !loadingCashapp || step === 'applepay' && !loadingApplePay || step === 'googlepay' && !loadingGooglePay) {
@@ -463,11 +471,13 @@
@if (step === 'applepay') { -
+
} @else if (step === 'cashapp') { -
+
+ } @else if (step === 'googlepay') { +
} - @if (loadingCashapp || loadingApplePay) { + @if (loadingCashapp || loadingApplePay || loadingGooglePay) {
Loading payment method...
@@ -515,7 +525,7 @@
Confirming your acceleration with our mining pool partners... - @if (timeSincePaid > 20000) { + @if (timeSincePaid > 30000) { ...sorry, this is taking longer than expected... }
diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.scss b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.scss index b35308384..ad085ed20 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.scss +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.scss @@ -172,10 +172,6 @@ background-color: var(--tertiary); } -.btn-small-height { - line-height: 1; -} - .summary-row { display: flex; flex-direction: row; diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts index 71c46e2da..1a5ace34f 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -1,17 +1,19 @@ +/* eslint-disable no-console */ import { Component, OnInit, OnDestroy, Output, EventEmitter, Input, ChangeDetectorRef, SimpleChanges, HostListener } from '@angular/core'; import { Subscription, tap, of, catchError, Observable, switchMap } from 'rxjs'; -import { ServicesApiServices } from '../../services/services-api.service'; -import { md5, nextRoundNumber, insecureRandomUUID } from '../../shared/common.utils'; -import { StateService } from '../../services/state.service'; -import { AudioService } from '../../services/audio.service'; -import { ETA, EtaService } from '../../services/eta.service'; -import { Transaction } from '../../interfaces/electrs.interface'; -import { MiningStats } from '../../services/mining.service'; -import { IAuth, AuthServiceMempool } from '../../services/auth.service'; -import { EnterpriseService } from '../../services/enterprise.service'; -import { ApiService } from '../../services/api.service'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { md5 } from '@app/shared/common.utils'; +import { StateService } from '@app/services/state.service'; +import { AudioService } from '@app/services/audio.service'; +import { ETA, EtaService } from '@app/services/eta.service'; +import { Transaction } from '@interfaces/electrs.interface'; +import { MiningStats } from '@app/services/mining.service'; +import { IAuth, AuthServiceMempool } from '@app/services/auth.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; +import { ApiService } from '@app/services/api.service'; +import { isDevMode } from '@angular/core'; -export type PaymentMethod = 'balance' | 'bitcoin' | 'cashapp'; +export type PaymentMethod = 'balance' | 'bitcoin' | 'cashapp' | 'applePay' | 'googlePay'; export type AccelerationEstimate = { hasAccess: boolean; @@ -24,7 +26,7 @@ export type AccelerationEstimate = { mempoolBaseFee: number; vsizeFee: number; pools: number[]; - availablePaymentMethods: {[method: string]: {min: number, max: number}}; + availablePaymentMethods: Record; unavailable?: boolean; options: { // recommended bid options fee: number; // recommended userBid in sats @@ -47,7 +49,7 @@ export const MIN_BID_RATIO = 1; export const DEFAULT_BID_RATIO = 2; export const MAX_BID_RATIO = 4; -type CheckoutStep = 'quote' | 'summary' | 'checkout' | 'cashapp' | 'applepay' | 'processing' | 'paid' | 'success'; +type CheckoutStep = 'quote' | 'summary' | 'checkout' | 'cashapp' | 'applepay' | 'googlepay' | 'processing' | 'paid' | 'success'; @Component({ selector: 'app-accelerate-checkout', @@ -62,6 +64,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { @Input() scrollEvent: boolean; @Input() cashappEnabled: boolean = true; @Input() applePayEnabled: boolean = false; + @Input() googlePayEnabled: boolean = true; @Input() advancedEnabled: boolean = false; @Input() forceMobile: boolean = false; @Input() showDetails: boolean = false; @@ -72,6 +75,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { @Output() changeMode = new EventEmitter(); calculating = true; + processing = false; selectedOption: 'wait' | 'accel'; cantPayReason = ''; quoteError = ''; // error fetching estimate or initial data @@ -80,18 +84,16 @@ export class AccelerateCheckout implements OnInit, OnDestroy { timePaid: number = 0; // time acceleration requested math = Math; isMobile: boolean = window.innerWidth <= 767.98; + isProdDomain = false; private _step: CheckoutStep = 'summary'; simpleMode: boolean = true; - paymentMethod: 'cashapp' | 'btcpay'; timeoutTimer: any; authSubscription$: Subscription; auth: IAuth | null = null; // accelerator stuff - square: { appId: string, locationId: string}; - accelerationUUID: string; accelerationSubscription: Subscription; difficultySubscription: Subscription; estimateSubscription: Subscription; @@ -112,14 +114,14 @@ export class AccelerateCheckout implements OnInit, OnDestroy { // square loadingCashapp = false; loadingApplePay = false; - cashappError = false; - cashappSubmit: any; + loadingGooglePay = false; payments: any; cashAppPay: any; applePay: any; + googlePay: any; conversionsSubscription: Subscription; - conversions: any; - + conversions: Record; + // btcpay loadingBtcpayInvoice = false; invoice = undefined; @@ -134,16 +136,16 @@ export class AccelerateCheckout implements OnInit, OnDestroy { private authService: AuthServiceMempool, private enterpriseService: EnterpriseService, ) { - this.accelerationUUID = insecureRandomUUID(); + this.isProdDomain = this.stateService.env.PROD_DOMAINS.indexOf(document.location.hostname) > -1; // Check if Apple Pay available - // @ts-ignore https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_js_api/checking_for_apple_pay_availability#overview - if (window.ApplePaySession) { + // https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_js_api/checking_for_apple_pay_availability#overview + if (window['ApplePaySession']) { this.applePayEnabled = true; } } - ngOnInit() { + ngOnInit(): void { this.authSubscription$ = this.authService.getAuth$().subscribe((auth) => { if (this.auth?.user?.userId !== auth?.user?.userId) { this.auth = auth; @@ -168,13 +170,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.moveToStep('summary'); } - this.servicesApiService.setupSquare$().subscribe(ids => { - this.square = { - appId: ids.squareAppId, - locationId: ids.squareLocationId - }; - }); - this.conversionsSubscription = this.stateService.conversions$.subscribe( async (conversions) => { this.conversions = conversions; @@ -182,7 +177,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { ); } - ngOnDestroy() { + ngOnDestroy(): void { if (this.estimateSubscription) { this.estimateSubscription.unsubscribe(); } @@ -195,14 +190,17 @@ export class AccelerateCheckout implements OnInit, OnDestroy { if (changes.scrollEvent && this.scrollEvent) { this.scrollToElement('acceleratePreviewAnchor', 'start'); } - if (changes.accelerating) { - if ((this.step === 'processing' || this.step === 'paid') && this.accelerating) { + if (changes.accelerating && this.accelerating) { + if (this.step === 'processing' || this.step === 'paid') { this.moveToStep('success'); + } else { // Edge case where the transaction gets accelerated by someone else or on another session + this.closeModal(); } } } - moveToStep(step: CheckoutStep) { + moveToStep(step: CheckoutStep): void { + this.processing = false; this._step = step; if (this.timeoutTimer) { clearTimeout(this.timeoutTimer); @@ -211,6 +209,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.fetchEstimate(); } if (this._step === 'checkout') { + this.insertSquare(); this.enterpriseService.goal(8); } if (this._step === 'checkout' && this.canPayWithBitcoin) { @@ -220,12 +219,14 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.requestBTCPayInvoice(); } else if (this._step === 'cashapp' && this.cashappEnabled) { this.loadingCashapp = true; - this.insertSquare(); this.setupSquare(); this.scrollToElementWithTimeout('confirm-title', 'center', 100); } else if (this._step === 'applepay' && this.applePayEnabled) { this.loadingApplePay = true; - this.insertSquare(); + this.setupSquare(); + this.scrollToElementWithTimeout('confirm-title', 'center', 100); + } else if (this._step === 'googlepay' && this.googlePayEnabled) { + this.loadingGooglePay = true; this.setupSquare(); this.scrollToElementWithTimeout('confirm-title', 'center', 100); } else if (this._step === 'paid') { @@ -234,7 +235,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { if (this.step === 'paid') { this.accelerateError = 'internal_server_error'; } - }, 120000) + }, 120000); } this.hasDetails.emit(this._step === 'quote'); } @@ -252,7 +253,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.scrollToElement(id, position); }, timeout); } - scrollToElement(id: string, position: ScrollLogicalPosition) { + scrollToElement(id: string, position: ScrollLogicalPosition): void { const acceleratePreviewAnchor = document.getElementById(id); if (acceleratePreviewAnchor) { this.cd.markForCheck(); @@ -267,7 +268,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { /** * Accelerator */ - fetchEstimate() { + fetchEstimate(): void { if (this.estimateSubscription) { this.estimateSubscription.unsubscribe(); } @@ -331,7 +332,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } }), - catchError((response) => { + catchError(() => { this.estimate = undefined; this.quoteError = `cannot_accelerate_tx`; this.estimateSubscription.unsubscribe(); @@ -367,6 +368,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.selectFeeRateIndex = index; this.userBid = Math.max(0, fee); this.cost = this.userBid + this.estimate.mempoolBaseFee + this.estimate.vsizeFee; + this.validateChoice(); } } @@ -374,18 +376,19 @@ export class AccelerateCheckout implements OnInit, OnDestroy { * Account-based acceleration request */ accelerateWithMempoolAccount(): void { - if (!this.canPay || this.calculating) { + if (!this.canPay || this.calculating || this.processing) { return; } + this.processing = true; if (this.accelerationSubscription) { this.accelerationSubscription.unsubscribe(); } this.accelerationSubscription = this.servicesApiService.accelerate$( this.tx.txid, this.userBid, - this.accelerationUUID ).subscribe({ next: () => { + this.processing = false; this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); this.audioService.playSound('ascend-chime-cartoon'); this.showSuccess = true; @@ -393,6 +396,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.moveToStep('paid'); }, error: (response) => { + this.processing = false; this.accelerateError = response.error; } }); @@ -402,63 +406,74 @@ export class AccelerateCheckout implements OnInit, OnDestroy { * Square */ insertSquare(): void { - //@ts-ignore - if (window.Square) { + if (!this.isProdDomain && !isDevMode()) { + return; + } + if (window['Square']) { return; } let statsUrl = 'https://sandbox.web.squarecdn.com/v1/square.js'; - if (document.location.hostname === 'mempool-staging.fmt.mempool.space' || - document.location.hostname === 'mempool-staging.va1.mempool.space' || - document.location.hostname === 'mempool-staging.fra.mempool.space' || - document.location.hostname === 'mempool-staging.tk7.mempool.space' || - document.location.hostname === 'mempool.space') { - statsUrl = 'https://web.squarecdn.com/v1/square.js'; + if (this.isProdDomain) { + statsUrl = '/square/v1/square.js'; } - (function() { + (function(): void { const d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - // @ts-ignore g.type='text/javascript'; g.src=statsUrl; s.parentNode.insertBefore(g, s); })(); } - setupSquare() { - const init = () => { + setupSquare(): void { + if (!this.isProdDomain && !isDevMode()) { + return; + } + const init = (): void => { this.initSquare(); }; - //@ts-ignore - if (!window.Square) { - console.debug('Square.js failed to load properly. Retrying in 1 second.'); - setTimeout(init, 1000); + if (!window['Square']) { + console.debug('Square.js failed to load properly. Retrying.'); + setTimeout(this.setupSquare.bind(this), 100); } else { init(); } } async initSquare(): Promise { try { - //@ts-ignore - this.payments = window.Square.payments(this.square.appId, this.square.locationId) - const urlParams = new URLSearchParams(window.location.search); - if (this._step === 'cashapp' || urlParams.get('cash_request_id')) { - await this.requestCashAppPayment(); - } else if (this._step === 'applepay') { - await this.requestApplePayPayment(); - } + this.servicesApiService.setupSquare$().subscribe({ + next: async (ids) => { + this.payments = window['Square'].payments(ids.squareAppId, ids.squareLocationId); + const urlParams = new URLSearchParams(window.location.search); + if (this._step === 'cashapp' || urlParams.get('cash_request_id')) { + await this.requestCashAppPayment(); + } else if (this._step === 'applepay') { + await this.requestApplePayPayment(); + } else if (this._step === 'googlepay') { + await this.requestGooglePayPayment(); + } + }, + error: () => { + console.debug('Error loading Square Payments'); + this.accelerateError = 'cannot_setup_square'; + } + }); } catch (e) { console.debug('Error loading Square Payments', e); - this.cashappError = true; - return; + this.accelerateError = 'cannot_setup_square'; } } /** * APPLE PAY */ - async requestApplePayPayment() { + async requestApplePayPayment(): Promise { + if (this.processing) { + return; + } if (this.conversionsSubscription) { this.conversionsSubscription.unsubscribe(); } - + + this.processing = true; this.conversionsSubscription = this.stateService.conversions$.subscribe( async (conversions) => { this.conversions = conversions; @@ -483,6 +498,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { console.error(`Unable to find apple pay button id='apple-pay-button'`); // Try again setTimeout(this.requestApplePayPayment.bind(this), 500); + this.processing = false; return; } this.loadingApplePay = false; @@ -494,6 +510,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { if (!card || !card.brand || !card.expMonth || !card.expYear || !card.last4) { console.error(`Cannot retreive payment card details`); this.accelerateError = 'apple_pay_no_card_details'; + this.processing = false; return; } const cardTag = md5(`${card.brand}${card.expMonth}${card.expYear}${card.last4}`.toLowerCase()); @@ -502,9 +519,11 @@ export class AccelerateCheckout implements OnInit, OnDestroy { tokenResult.token, cardTag, `accelerator-${this.tx.txid.substring(0, 15)}-${Math.round(new Date().getTime() / 1000)}`, - this.accelerationUUID + costUSD ).subscribe({ next: () => { + this.processing = false; + this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); this.audioService.playSound('ascend-chime-cartoon'); if (this.applePay) { this.applePay.destroy(); @@ -514,6 +533,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { }, 1000); }, error: (response) => { + this.processing = false; this.accelerateError = response.error; if (!(response.status === 403 && response.error === 'not_available')) { setTimeout(() => { @@ -525,6 +545,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } }); } else { + this.processing = false; let errorMessage = `Tokenization failed with status: ${tokenResult.status}`; if (tokenResult.errors) { errorMessage += ` and errors: ${JSON.stringify( @@ -535,6 +556,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } }); } catch (e) { + this.processing = false; console.error(e); } } @@ -542,13 +564,112 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } /** - * CASHAPP + * GOOGLE PAY */ - async requestCashAppPayment() { + async requestGooglePayPayment(): Promise { + if (this.processing) { + return; + } if (this.conversionsSubscription) { this.conversionsSubscription.unsubscribe(); } + this.processing = true; + this.conversionsSubscription = this.stateService.conversions$.subscribe( + async (conversions) => { + this.conversions = conversions; + if (this.googlePay) { + this.googlePay.destroy(); + } + + const costUSD = this.cost / 100_000_000 * conversions.USD; + const paymentRequest = this.payments.paymentRequest({ + countryCode: 'US', + currencyCode: 'USD', + total: { + amount: costUSD.toFixed(2), + label: 'Total' + } + }); + this.googlePay = await this.payments.googlePay(paymentRequest , { + referenceId: `accelerator-${this.tx.txid.substring(0, 15)}-${Math.round(new Date().getTime() / 1000)}`, + }); + + await this.googlePay.attach(`#google-pay-button`, { + buttonType: 'pay', + buttonSizeMode: 'fill', + }); + this.loadingGooglePay = false; + + document.getElementById('google-pay-button').addEventListener('click', async event => { + event.preventDefault(); + const tokenResult = await this.googlePay.tokenize(); + if (tokenResult?.status === 'OK') { + const card = tokenResult.details?.card; + if (!card || !card.brand || !card.expMonth || !card.expYear || !card.last4) { + console.error(`Cannot retreive payment card details`); + this.accelerateError = 'apple_pay_no_card_details'; + this.processing = false; + return; + } + const cardTag = md5(`${card.brand}${card.expMonth}${card.expYear}${card.last4}`.toLowerCase()); + this.servicesApiService.accelerateWithGooglePay$( + this.tx.txid, + tokenResult.token, + cardTag, + `accelerator-${this.tx.txid.substring(0, 15)}-${Math.round(new Date().getTime() / 1000)}`, + costUSD + ).subscribe({ + next: () => { + this.processing = false; + this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); + this.audioService.playSound('ascend-chime-cartoon'); + if (this.googlePay) { + this.googlePay.destroy(); + } + setTimeout(() => { + this.moveToStep('paid'); + }, 1000); + }, + error: (response) => { + this.processing = false; + this.accelerateError = response.error; + if (!(response.status === 403 && response.error === 'not_available')) { + setTimeout(() => { + // Reset everything by reloading the page :D, can be improved + const urlParams = new URLSearchParams(window.location.search); + window.location.assign(window.location.toString().replace(`?cash_request_id=${urlParams.get('cash_request_id')}`, ``)); + }, 3000); + } + } + }); + } else { + this.processing = false; + let errorMessage = `Tokenization failed with status: ${tokenResult.status}`; + if (tokenResult.errors) { + errorMessage += ` and errors: ${JSON.stringify( + tokenResult.errors, + )}`; + } + throw new Error(errorMessage); + } + }); + } + ); + } + + /** + * CASHAPP + */ + async requestCashAppPayment(): Promise { + if (this.processing) { + return; + } + if (this.conversionsSubscription) { + this.conversionsSubscription.unsubscribe(); + } + + this.processing = true; this.conversionsSubscription = this.stateService.conversions$.subscribe( async (conversions) => { this.conversions = conversions; @@ -565,24 +686,21 @@ export class AccelerateCheckout implements OnInit, OnDestroy { amount: costUSD.toFixed(2), label: 'Total', pending: true, - productUrl: `${redirectHostname}/tracker/${this.tx.txid}`, - }, - button: { shape: 'semiround', size: 'small', theme: 'light'} + productUrl: `${redirectHostname}/tx/${this.tx.txid}`, + } }); this.cashAppPay = await this.payments.cashAppPay(paymentRequest, { - redirectURL: `${redirectHostname}/tracker/${this.tx.txid}`, - referenceId: `accelerator-${this.tx.txid.substring(0, 15)}-${Math.round(new Date().getTime() / 1000)}`, - button: { shape: 'semiround', size: 'small', theme: 'light'} + redirectURL: `${redirectHostname}/tx/${this.tx.txid}`, + referenceId: `accelerator-${this.tx.txid.substring(0, 15)}-${Math.round(new Date().getTime() / 1000)}` }); - if (this.step === 'cashapp') { - await this.cashAppPay.attach(`#cash-app-pay`, { theme: 'light', size: 'small', shape: 'semiround' }) - } + await this.cashAppPay.attach(`#cash-app-pay`, { theme: 'dark' }); this.loadingCashapp = false; this.cashAppPay.addEventListener('ontokenization', event => { const { tokenResult, error } = event.detail; if (error) { + this.processing = false; this.accelerateError = error; } else if (tokenResult.status === 'OK') { this.servicesApiService.accelerateWithCashApp$( @@ -590,9 +708,10 @@ export class AccelerateCheckout implements OnInit, OnDestroy { tokenResult.token, tokenResult.details.cashAppPay.cashtag, tokenResult.details.cashAppPay.referenceId, - this.accelerationUUID + costUSD ).subscribe({ next: () => { + this.processing = false; this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); this.audioService.playSound('ascend-chime-cartoon'); if (this.cashAppPay) { @@ -607,6 +726,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { }, 1000); }, error: (response) => { + this.processing = false; this.accelerateError = response.error; if (!(response.status === 403 && response.error === 'not_available')) { setTimeout(() => { @@ -626,7 +746,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { /** * BTCPay */ - async requestBTCPayInvoice() { + async requestBTCPayInvoice(): Promise { this.servicesApiService.generateBTCPayAcceleratorInvoice$(this.tx.txid, this.userBid).pipe( switchMap(response => { return this.servicesApiService.retreiveInvoice$(response.btcpayInvoiceId); @@ -656,54 +776,61 @@ export class AccelerateCheckout implements OnInit, OnDestroy { /** * UI events */ - selectedOptionChanged(event) { + selectedOptionChanged(event): void { this.selectedOption = event.target.id; } - get step() { + get step(): CheckoutStep { return this._step; } - get paymentMethods() { - return Object.keys(this.estimate?.availablePaymentMethods || {}); + get paymentMethods(): PaymentMethod[] { + return Object.keys(this.estimate?.availablePaymentMethods || {}) as PaymentMethod[]; } - get couldPayWithBitcoin() { + get couldPayWithBitcoin(): boolean { return !!this.estimate?.availablePaymentMethods?.bitcoin; } - get couldPayWithCashapp() { + get couldPayWithCashapp(): boolean { if (!this.cashappEnabled) { return false; } return !!this.estimate?.availablePaymentMethods?.cashapp; } - get couldPayWithApplePay() { + get couldPayWithApplePay(): boolean { if (!this.applePayEnabled) { return false; } return !!this.estimate?.availablePaymentMethods?.applePay; } - get couldPayWithBalance() { + get couldPayWithGooglePay(): boolean { + if (!this.googlePayEnabled) { + return false; + } + return !!this.estimate?.availablePaymentMethods?.googlePay; + } + + get couldPayWithBalance(): boolean { if (!this.hasAccessToBalanceMode) { return false; } return !!this.estimate?.availablePaymentMethods?.balance; } - get couldPay() { - return this.couldPayWithBalance || this.couldPayWithBitcoin || this.couldPayWithCashapp || this.couldPayWithApplePay; + get couldPay(): boolean { + return this.couldPayWithBalance || this.couldPayWithBitcoin || this.couldPayWithCashapp || this.couldPayWithApplePay || this.couldPayWithGooglePay; } - get canPayWithBitcoin() { + get canPayWithBitcoin(): boolean { const paymentMethod = this.estimate?.availablePaymentMethods?.bitcoin; return paymentMethod && this.cost >= paymentMethod.min && this.cost <= paymentMethod.max; } - get canPayWithCashapp() { - if (!this.cashappEnabled || !this.conversions) { + get canPayWithCashapp(): boolean { + if (!this.cashappEnabled || !this.conversions || (!this.isProdDomain && !isDevMode())) { return false; } @@ -718,8 +845,8 @@ export class AccelerateCheckout implements OnInit, OnDestroy { return false; } - get canPayWithApplePay() { - if (!this.applePayEnabled || !this.conversions) { + get canPayWithApplePay(): boolean { + if (!this.applePayEnabled || !this.conversions || (!this.isProdDomain && !isDevMode())) { return false; } @@ -734,7 +861,23 @@ export class AccelerateCheckout implements OnInit, OnDestroy { return false; } - get canPayWithBalance() { + get canPayWithGooglePay(): boolean { + if (!this.googlePayEnabled || !this.conversions || (!this.isProdDomain && !isDevMode())) { + return false; + } + + const paymentMethod = this.estimate?.availablePaymentMethods?.googlePay; + if (paymentMethod) { + const costUSD = (this.cost / 100_000_000 * this.conversions.USD); + if (costUSD >= paymentMethod.min && costUSD <= paymentMethod.max) { + return true; + } + } + + return false; + } + + get canPayWithBalance(): boolean { if (!this.hasAccessToBalanceMode) { return false; } @@ -742,11 +885,11 @@ export class AccelerateCheckout implements OnInit, OnDestroy { return paymentMethod && this.cost >= paymentMethod.min && this.cost <= paymentMethod.max && this.cost <= this.estimate?.userBalance; } - get canPay() { - return this.canPayWithBalance || this.canPayWithBitcoin || this.canPayWithCashapp || this.canPayWithApplePay; + get canPay(): boolean { + return this.canPayWithBalance || this.canPayWithBitcoin || this.canPayWithCashapp || this.canPayWithApplePay || this.canPayWithGooglePay; } - get hasAccessToBalanceMode() { + get hasAccessToBalanceMode(): boolean { return this.isLoggedIn() && this.estimate?.hasAccess; } diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.html b/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.html index a5e258210..564ee0ad1 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.html +++ b/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.html @@ -12,7 +12,7 @@

- {{ bar.class === 'tx' ? '' : '+' }}{{ bar.fee | number }} sat + {{ bar.class === 'tx' ? '' : '+' }}{{ bar.fee | number }} sats
diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts b/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts index 393add6ca..5890e6582 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts @@ -1,6 +1,6 @@ import { Component, Input, Output, OnChanges, EventEmitter, HostListener, OnInit, ViewChild, ElementRef, AfterViewInit, OnDestroy, ChangeDetectorRef } from '@angular/core'; -import { Transaction } from '../../interfaces/electrs.interface'; -import { AccelerationEstimate, RateOption } from './accelerate-checkout.component'; +import { Transaction } from '@interfaces/electrs.interface'; +import { AccelerationEstimate, RateOption } from '@components/accelerate-checkout/accelerate-checkout.component'; interface GraphBar { rate: number; diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html b/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html new file mode 100644 index 000000000..0f436f9ac --- /dev/null +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html @@ -0,0 +1,63 @@ +
+ + + + + + + + + + + + + @if (accelerationInfo.status === 'accelerated') { + + } @else { + + } + + + @if (accelerationInfo.status === 'seen') { + + + } @else if (accelerationInfo.status === 'accelerated' || accelerationInfo.status === 'mined') { + + @if (accelerationInfo.status === 'accelerated') { + + } @else { + + } + } + + + + + + +
Status + @if (accelerationInfo.status === 'seen') { + First seen + } @else if (accelerationInfo.status === 'accelerated') { + Accelerated + } @else if (accelerationInfo.status === 'mined') { + Mined + } +
Fee{{ accelerationInfo.fee | number }} sats
Out-of-band fees{{ accelerationInfo.feeDelta | number }} sats{{ accelerationInfo.bidBoost | number }} sats
Fee rateAccelerated fee rate
Accelerated by + + +
+
+
+
diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.scss b/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.scss new file mode 100644 index 000000000..a8c4cd5cf --- /dev/null +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.scss @@ -0,0 +1,41 @@ +.acceleration-tooltip { + position: fixed; + z-index: 3; + background: color-mix(in srgb, var(--active-bg) 95%, transparent); + border-radius: 4px; + box-shadow: 1px 1px 10px rgba(0,0,0,0.5); + color: var(--tooltip-grey); + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 10px 15px; + text-align: left; + pointer-events: none; + + .badge.badge-accelerated { + background-color: var(--tertiary); + color: white; + } + + .value { + text-align: end; + } + + .label { + padding-right: 30px; + vertical-align: top; + } + + .pool-logo { + width: 22px; + height: 22px; + position: relative; + top: -1px; + margin-right: 4px; + margin-bottom: 4px; + } + + .oobFees { + color: #905cf4; + } +} diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.ts b/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.ts new file mode 100644 index 000000000..b4b3405fc --- /dev/null +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.ts @@ -0,0 +1,38 @@ +import { Component, ElementRef, ViewChild, Input, OnChanges } from '@angular/core'; + +@Component({ + selector: 'app-acceleration-timeline-tooltip', + templateUrl: './acceleration-timeline-tooltip.component.html', + styleUrls: ['./acceleration-timeline-tooltip.component.scss'], +}) +export class AccelerationTimelineTooltipComponent implements OnChanges { + @Input() accelerationInfo: any; + @Input() cursorPosition: { x: number, y: number }; + + tooltipPosition: any = null; + + @ViewChild('tooltip') tooltipElement: ElementRef; + + constructor() {} + + ngOnChanges(changes): void { + if (changes.cursorPosition && changes.cursorPosition.currentValue) { + let x = Math.max(10, changes.cursorPosition.currentValue.x - 50); + let y = changes.cursorPosition.currentValue.y + 20; + if (this.tooltipElement) { + const elementBounds = this.tooltipElement.nativeElement.getBoundingClientRect(); + if ((x + elementBounds.width) > (window.innerWidth - 10)) { + x = Math.max(0, window.innerWidth - elementBounds.width - 10); + } + if (y + elementBounds.height > (window.innerHeight - 20)) { + y = y - elementBounds.height - 20; + } + } + this.tooltipPosition = { x, y }; + } + } + + hasPoolsData(): boolean { + return Object.keys(this.accelerationInfo.poolsData).length > 0; + } +} diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.html b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.html index 28076efa5..af76bbc7b 100644 --- a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.html +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.html @@ -1,6 +1,6 @@
- @if (!tx.status.confirmed) { + @if (!tx.status.confirmed || canceled) {
@@ -8,8 +8,8 @@
- @if (eta) { - ~ + @if (eta && !canceled) { + ~ }
@@ -19,16 +19,20 @@
-
+
-
+
-
+
-
Mined
+ @if (canceled) { +
Canceled
+ } @else { +
Mined
+ }
@@ -38,18 +42,16 @@
- +
@if (tx.status.confirmed) { -
- -
- } @else if (standardETA && !tx.status.confirmed) { - + + } @else if (eta && canceled) { + ~ }
@@ -58,7 +60,7 @@
-
+
First seen
@@ -73,47 +75,50 @@
-
+
- @if (tx.status.confirmed) { + @if (tx.status.confirmed && !canceled) {
} @else {
} -
+
- @if (!tx.status.confirmed) { -
+ @if (!tx.status.confirmed || canceled) { +
}
- @if (tx.status.confirmed) { + @if (tx.status.confirmed && !canceled) {
Accelerated
} -
+
@if (!tx.status.confirmed) { Accelerated{{ "" }} } @if (useAbsoluteTime) { {{ acceleratedAt * 1000 | date }} } @else { - + }
- @if (tx.status.confirmed) { + @if (tx.status.confirmed && !canceled) {
} @else {
}
- @if (tx.status.confirmed) { + @if (tx.status.confirmed && !canceled) {
} @else {
} -
+
@if (tx.status.confirmed) { @@ -130,4 +135,10 @@
+ + +
diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.scss b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.scss index 93a0cdba1..2bd46199a 100644 --- a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.scss +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.scss @@ -129,6 +129,9 @@ margin-left: calc(-4em + 5px); animation: goFasterLeft 0.8s infinite linear; } + &.no-animation { + animation: none; + } } &.left { @@ -152,9 +155,16 @@ margin-bottom: -8px; transform: translateY(-50%); border-radius: 50%; - cursor: pointer; padding: 4px; background: transparent; + transition: background-color 300ms, padding 300ms; + + &.hovering { + cursor: pointer; + &:hover { + padding: 0px; + } + } .shape { position: relative; diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts index c8dbed72b..59e63d839 100644 --- a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts @@ -1,6 +1,8 @@ -import { Component, Input, OnInit, OnChanges } from '@angular/core'; -import { ETA } from '../../services/eta.service'; -import { Transaction } from '../../interfaces/electrs.interface'; +import { Component, Input, OnInit, OnChanges, HostListener } from '@angular/core'; +import { ETA } from '@app/services/eta.service'; +import { Transaction } from '@interfaces/electrs.interface'; +import { Acceleration, SinglePoolStats } from '@interfaces/node-api.interface'; +import { MiningService } from '@app/services/mining.service'; @Component({ selector: 'app-acceleration-timeline', @@ -9,47 +11,82 @@ import { Transaction } from '../../interfaces/electrs.interface'; }) export class AccelerationTimelineComponent implements OnInit, OnChanges { @Input() transactionTime: number; + @Input() acceleratedAt: number; @Input() tx: Transaction; + @Input() accelerationInfo: Acceleration; @Input() eta: ETA; - // A mined transaction has standard ETA and accelerated ETA undefined - // A transaction in mempool has either standardETA defined (if accelerated) or acceleratedETA defined (if not accelerated yet) - @Input() standardETA: number; - @Input() acceleratedETA: number; + @Input() canceled: boolean; - acceleratedAt: number; now: number; accelerateRatio: number; useAbsoluteTime: boolean = false; - interval: number; + firstSeenToAccelerated: number; + acceleratedToMined: number; - constructor() {} + tooltipPosition = null; + hoverInfo: any = null; + poolsData: { [id: number]: SinglePoolStats } = {}; + + constructor( + private miningService: MiningService, + ) {} ngOnInit(): void { - this.acceleratedAt = this.tx.acceleratedAt ?? new Date().getTime() / 1000; - this.now = Math.floor(new Date().getTime() / 1000); - this.useAbsoluteTime = this.tx.status.block_time < this.now - 7 * 24 * 3600; + this.updateTimes(); - this.interval = window.setInterval(() => { - this.now = Math.floor(new Date().getTime() / 1000); - this.useAbsoluteTime = this.tx.status.block_time < this.now - 7 * 24 * 3600; - }, 60000); + this.miningService.getPools().subscribe(pools => { + for (const pool of pools) { + this.poolsData[pool.unique_id] = pool; + } + }); } ngOnChanges(changes): void { - // Hide standard ETA while we don't have a proper standard ETA calculation, see https://github.com/mempool/mempool/issues/65 - - // if (changes?.eta?.currentValue || changes?.standardETA?.currentValue || changes?.acceleratedETA?.currentValue) { - // if (changes?.eta?.currentValue) { - // if (changes?.acceleratedETA?.currentValue) { - // this.accelerateRatio = Math.floor((Math.floor(changes.eta.currentValue.time / 1000) - this.now) / (Math.floor(changes.acceleratedETA.currentValue / 1000) - this.now)); - // } else if (changes?.standardETA?.currentValue) { - // this.accelerateRatio = Math.floor((Math.floor(changes.standardETA.currentValue / 1000) - this.now) / (Math.floor(changes.eta.currentValue.time / 1000) - this.now)); - // } - // } - // } + this.updateTimes(); } - ngOnDestroy(): void { - clearInterval(this.interval); + updateTimes(): void { + this.now = Math.floor(new Date().getTime() / 1000); + this.useAbsoluteTime = this.tx.status.block_time < this.now - 7 * 24 * 3600; + this.firstSeenToAccelerated = Math.max(0, this.acceleratedAt - this.transactionTime); + this.acceleratedToMined = Math.max(0, this.tx.status.block_time - this.acceleratedAt); + } + + onHover(event, status: string): void { + if (status === 'seen') { + this.hoverInfo = { + status, + fee: this.tx.fee, + weight: this.tx.weight + }; + } else if (status === 'accelerated') { + this.hoverInfo = { + status, + fee: this.accelerationInfo?.effectiveFee || this.tx.fee, + weight: this.tx.weight, + feeDelta: this.accelerationInfo?.feeDelta || this.tx.feeDelta, + pools: this.tx.acceleratedBy || this.accelerationInfo?.pools, + poolsData: this.poolsData + }; + } else if (status === 'mined') { + this.hoverInfo = { + status, + fee: this.accelerationInfo?.effectiveFee, + weight: this.tx.weight, + bidBoost: this.accelerationInfo?.bidBoost, + minedByPoolUniqueId: this.accelerationInfo?.minedByPoolUniqueId, + pools: this.tx.acceleratedBy || this.accelerationInfo?.pools, + poolsData: this.poolsData + }; + } + } + + onBlur(event): void { + this.hoverInfo = null; + } + + @HostListener('pointermove', ['$event']) + onPointerMove(event) { + this.tooltipPosition = { x: event.clientX, y: event.clientY }; } } diff --git a/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts b/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts index b5e575409..6a99edbf1 100644 --- a/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts +++ b/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts @@ -1,18 +1,18 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, NgZone, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core'; -import { EChartsOption } from '../../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { Observable, Subject, Subscription, combineLatest, fromEvent, merge, share } from 'rxjs'; import { startWith, switchMap, tap } from 'rxjs/operators'; -import { SeoService } from '../../../services/seo.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../../shared/graphs.utils'; -import { StorageService } from '../../../services/storage.service'; -import { MiningService } from '../../../services/mining.service'; +import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '@app/shared/graphs.utils'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; import { ActivatedRoute, Router } from '@angular/router'; -import { Acceleration } from '../../../interfaces/node-api.interface'; -import { ServicesApiServices } from '../../../services/services-api.service'; -import { StateService } from '../../../services/state.service'; -import { RelativeUrlPipe } from '../../../shared/pipes/relative-url/relative-url.pipe'; +import { Acceleration } from '@interfaces/node-api.interface'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { StateService } from '@app/services/state.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; @Component({ selector: 'app-acceleration-fees-graph', @@ -23,7 +23,7 @@ import { RelativeUrlPipe } from '../../../shared/pipes/relative-url/relative-url position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, @@ -264,7 +264,7 @@ export class AccelerationFeesGraphComponent implements OnInit, OnChanges, OnDest type: 'bar', barWidth: '90%', large: true, - barMinHeight: 1, + barMinHeight: 3, }, ], dataZoom: (this.widget || data.length === 0 )? undefined : [{ diff --git a/frontend/src/app/components/acceleration/acceleration-stats/acceleration-stats.component.ts b/frontend/src/app/components/acceleration/acceleration-stats/acceleration-stats.component.ts index 392f1392b..65a1e4eb5 100644 --- a/frontend/src/app/components/acceleration/acceleration-stats/acceleration-stats.component.ts +++ b/frontend/src/app/components/acceleration/acceleration-stats/acceleration-stats.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { ServicesApiServices } from '../../../services/services-api.service'; +import { ServicesApiServices } from '@app/services/services-api.service'; export type AccelerationStats = { totalRequested: number; diff --git a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.html b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.html index 12386e30c..225bf1955 100644 --- a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.html +++ b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -4,8 +4,8 @@
-
- +
+
@@ -21,8 +21,8 @@ - - + + - - - - - - - - + @if (!pending) { + + + + + + + + + + + } @else { + + + + + + + + + }
TXID Requested
@@ -33,7 +33,7 @@ - {{ (acceleration.feeDelta) | number }} sat + {{ (acceleration.feeDelta) | number }} sats @@ -41,7 +41,7 @@ - {{ acceleration.boost | number }} sat + {{ acceleration.boost | number }} sats ~ @@ -62,8 +62,9 @@ Pending - Completed 🔄 - Failed 🔄 + Completed ⌛ + Mined ⌛ + Canceled ⌛ @@ -72,22 +73,47 @@
- - - - - - - -
+ + + + + + + + + + + +
+ + + + + + + +
diff --git a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.scss b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.scss index 56c92ff02..7f7f24bd5 100644 --- a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.scss +++ b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.scss @@ -85,8 +85,8 @@ tr, td, th { } .pool-logo { - width: 22px; - height: 22px; + width: 18px; + height: 18px; position: relative; top: -1px; margin-right: 2px; diff --git a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts index 5b2b30d7a..ee5303530 100644 --- a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts +++ b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts @@ -1,12 +1,12 @@ import { Component, OnInit, ChangeDetectionStrategy, Input, ChangeDetectorRef, OnDestroy, Inject, LOCALE_ID } from '@angular/core'; -import { BehaviorSubject, Observable, Subscription, catchError, filter, of, switchMap, tap, throttleTime } from 'rxjs'; -import { Acceleration, BlockExtended, SinglePoolStats } from '../../../interfaces/node-api.interface'; -import { StateService } from '../../../services/state.service'; -import { WebsocketService } from '../../../services/websocket.service'; -import { ServicesApiServices } from '../../../services/services-api.service'; -import { SeoService } from '../../../services/seo.service'; +import { BehaviorSubject, Observable, Subscription, catchError, combineLatest, filter, of, switchMap, tap, throttleTime, timer } from 'rxjs'; +import { Acceleration, BlockExtended, SinglePoolStats } from '@interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { SeoService } from '@app/services/seo.service'; import { ActivatedRoute, Router } from '@angular/router'; -import { MiningService } from '../../../services/mining.service'; +import { MiningService } from '@app/services/mining.service'; @Component({ selector: 'app-accelerations-list', @@ -32,6 +32,7 @@ export class AccelerationsListComponent implements OnInit, OnDestroy { dir: 'rtl' | 'ltr' = 'ltr'; paramSubscription: Subscription; pools: { [id: number]: SinglePoolStats } = {}; + nonEmptyAccelerations: boolean = true; constructor( private servicesApiService: ServicesApiServices, @@ -50,12 +51,21 @@ export class AccelerationsListComponent implements OnInit, OnDestroy { } ngOnInit(): void { + this.miningService.getPools().subscribe(pools => { + for (const pool of pools) { + this.pools[pool.unique_id] = pool; + } + }); + if (!this.widget) { this.websocketService.want(['blocks']); this.seoService.setTitle($localize`:@@02573b6980a2d611b4361a2595a4447e390058cd:Accelerations`); - this.paramSubscription = this.route.params.pipe( - tap(params => { + this.paramSubscription = combineLatest([ + this.route.params, + timer(0), + ]).pipe( + tap(([params]) => { this.page = +params['page'] || 1; this.pageSubject.next(this.page); }) @@ -82,12 +92,6 @@ export class AccelerationsListComponent implements OnInit, OnDestroy { ).subscribe(() => { this.pageChange(this.page); }); - - this.miningService.getMiningStats('1m').subscribe(stats => { - for (const pool of stats.pools) { - this.pools[pool.poolUniqueId] = pool; - } - }); } this.skeletonLines = this.widget === true ? [...Array(6).keys()] : [...Array(15).keys()]; @@ -115,6 +119,7 @@ export class AccelerationsListComponent implements OnInit, OnDestroy { for (const acc of accelerations) { acc.boost = acc.boostCost != null ? acc.boostCost : acc.bidBoost; } + this.nonEmptyAccelerations = accelerations.length > 0; if (this.widget) { return of(accelerations.slice(0, 6)); } else { @@ -146,4 +151,4 @@ export class AccelerationsListComponent implements OnInit, OnDestroy { this.paramSubscription?.unsubscribe(); this.keyNavigationSubscription?.unsubscribe(); } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts b/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts index d84c6e97c..ab7d9122e 100644 --- a/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts +++ b/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts @@ -1,18 +1,18 @@ import { ChangeDetectionStrategy, Component, HostListener, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; -import { SeoService } from '../../../services/seo.service'; -import { OpenGraphService } from '../../../services/opengraph.service'; -import { WebsocketService } from '../../../services/websocket.service'; -import { Acceleration, BlockExtended } from '../../../interfaces/node-api.interface'; -import { StateService } from '../../../services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { Acceleration, BlockExtended } from '@interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; import { Observable, Subscription, catchError, combineLatest, distinctUntilChanged, map, of, share, switchMap, tap } from 'rxjs'; -import { Color } from '../../block-overview-graph/sprite-types'; -import { hexToColor } from '../../block-overview-graph/utils'; -import TxView from '../../block-overview-graph/tx-view'; -import { feeLevels, defaultMempoolFeeColors, contrastMempoolFeeColors } from '../../../app.constants'; -import { ServicesApiServices } from '../../../services/services-api.service'; -import { detectWebGL } from '../../../shared/graphs.utils'; -import { AudioService } from '../../../services/audio.service'; -import { ThemeService } from '../../../services/theme.service'; +import { Color } from '@components/block-overview-graph/sprite-types'; +import { hexToColor } from '@components/block-overview-graph/utils'; +import TxView from '@components/block-overview-graph/tx-view'; +import { feeLevels, defaultMempoolFeeColors, contrastMempoolFeeColors } from '@app/app.constants'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { detectWebGL } from '@app/shared/graphs.utils'; +import { AudioService } from '@app/services/audio.service'; +import { ThemeService } from '@app/services/theme.service'; const acceleratedColor: Color = hexToColor('8F5FF6'); const normalColors = defaultMempoolFeeColors.map(hex => hexToColor(hex + '5F')); diff --git a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html index 83ecad459..be5d7e021 100644 --- a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html +++ b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html @@ -1,7 +1,7 @@ @if (chartOnly) { } @else { - +
@@ -10,17 +10,17 @@ diff --git a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.scss b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.scss index b01a902a4..041a66ea2 100644 --- a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.scss +++ b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.scss @@ -61,4 +61,8 @@ & > div, & > div > svg { overflow: visible !important; } +} + +.oobFees { + color: #905cf4; } \ No newline at end of file diff --git a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts index 46ba12816..739760017 100644 --- a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts +++ b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts @@ -1,8 +1,8 @@ -import { Component, ChangeDetectionStrategy, Input, Output, OnChanges, SimpleChanges, EventEmitter } from '@angular/core'; -import { Transaction } from '../../../interfaces/electrs.interface'; -import { Acceleration, SinglePoolStats } from '../../../interfaces/node-api.interface'; -import { EChartsOption, PieSeriesOption } from '../../../graphs/echarts'; -import { MiningStats } from '../../../services/mining.service'; +import { Component, ChangeDetectionStrategy, Input, Output, OnChanges, SimpleChanges, EventEmitter, ChangeDetectorRef } from '@angular/core'; +import { Transaction } from '@interfaces/electrs.interface'; +import { Acceleration, SinglePoolStats } from '@interfaces/node-api.interface'; +import { EChartsOption, PieSeriesOption } from '@app/graphs/echarts'; +import { MiningStats } from '@app/services/mining.service'; function lighten(color, p): { r, g, b } { return { @@ -23,7 +23,8 @@ function toRGB({r,g,b}): string { changeDetection: ChangeDetectionStrategy.OnPush, }) export class ActiveAccelerationBox implements OnChanges { - @Input() tx: Transaction; + @Input() acceleratedBy?: number[]; + @Input() effectiveFeeRate?: number; @Input() accelerationInfo: Acceleration; @Input() miningStats: MiningStats; @Input() pools: number[]; @@ -41,10 +42,12 @@ export class ActiveAccelerationBox implements OnChanges { timespan = ''; chartInstance: any = undefined; - constructor() {} + constructor( + private cd: ChangeDetectorRef, + ) {} ngOnChanges(changes: SimpleChanges): void { - const pools = this.pools || this.accelerationInfo?.pools || this.tx.acceleratedBy; + const pools = this.pools || this.accelerationInfo?.pools || this.acceleratedBy; if (pools && this.miningStats) { this.prepareChartOptions(pools); } @@ -67,16 +70,27 @@ export class ActiveAccelerationBox implements OnChanges { const acceleratingPools = (poolList || []).filter(id => pools[id]).sort((a,b) => pools[a].lastEstimatedHashrate - pools[b].lastEstimatedHashrate); const totalAcceleratedHashrate = acceleratingPools.reduce((total, pool) => total + pools[pool].lastEstimatedHashrate, 0); + // Find the first pool with at least 1% of the total network hashrate + const firstSignificantPool = acceleratingPools.findIndex(pool => pools[pool].lastEstimatedHashrate > this.miningStats.lastEstimatedHashrate / 100); + const numSignificantPools = acceleratingPools.length - firstSignificantPool; acceleratingPools.forEach((poolId, index) => { const pool = pools[poolId]; const poolShare = ((pool.lastEstimatedHashrate / this.miningStats.lastEstimatedHashrate) * 100).toFixed(1); + let color = 'white'; + if (index >= firstSignificantPool) { + if (numSignificantPools > 1) { + color = toRGB(lighten({ r: 147, g: 57, b: 244 }, 1 - (index - firstSignificantPool) / Math.max((numSignificantPools - 1), 1))); + } else { + color = toRGB({ r: 147, g: 57, b: 244 }); + } + } data.push(getDataItem( pool.lastEstimatedHashrate, - toRGB(lighten({ r: 147, g: 57, b: 244 }, index * .08)), + color, `${pool.name} (${poolShare}%)`, true, ) as PieSeriesOption); - }) + }); this.acceleratedByPercentage = ((totalAcceleratedHashrate / this.miningStats.lastEstimatedHashrate) * 100).toFixed(1) + '%'; const notAcceleratedByPercentage = ((1 - (totalAcceleratedHashrate / this.miningStats.lastEstimatedHashrate)) * 100).toFixed(1) + '%'; data.push(getDataItem( @@ -127,6 +141,7 @@ export class ActiveAccelerationBox implements OnChanges { } ] }; + this.cd.markForCheck(); } onChartInit(ec) { @@ -139,4 +154,4 @@ export class ActiveAccelerationBox implements OnChanges { onToggleCpfp(): void { this.toggleCpfp.emit(); } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/acceleration/pending-stats/pending-stats.component.ts b/frontend/src/app/components/acceleration/pending-stats/pending-stats.component.ts index 568e60d7e..ed63ad098 100644 --- a/frontend/src/app/components/acceleration/pending-stats/pending-stats.component.ts +++ b/frontend/src/app/components/acceleration/pending-stats/pending-stats.component.ts @@ -1,9 +1,9 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable, of } from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { Acceleration } from '../../../interfaces/node-api.interface'; -import { StateService } from '../../../services/state.service'; -import { WebsocketService } from '../../../services/websocket.service'; +import { Acceleration } from '@interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-pending-stats', diff --git a/frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.html b/frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.html new file mode 100644 index 000000000..bf0080344 --- /dev/null +++ b/frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.html @@ -0,0 +1,5 @@ +
+
+ + +
+
\ No newline at end of file diff --git a/frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.scss b/frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.scss new file mode 100644 index 000000000..35f6e32d5 --- /dev/null +++ b/frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.scss @@ -0,0 +1,45 @@ +.sparkles { + position: absolute; + top: var(--block-size); + height: 50px; + right: 0; +} + +.sparkle { + position: absolute; + color: rgba(152, 88, 255, 0.75); + opacity: 0; + transform: scale(0.8) rotate(0deg); + animation: pop ease 2000ms forwards, sparkle ease 500ms infinite; +} + +.inner-sparkle { + display: block; +} + +@keyframes pop { + 0% { + transform: scale(0.8) rotate(0deg); + opacity: 0; + } + 20% { + transform: scale(1) rotate(72deg); + opacity: 1; + } + 100% { + transform: scale(0) rotate(360deg); + opacity: 0; + } +} + +@keyframes sparkle { + 0% { + color: rgba(152, 88, 255, 0.75); + } + 50% { + color: rgba(198, 162, 255, 0.75); + } + 100% { + color: rgba(152, 88, 255, 0.75); + } +} \ No newline at end of file diff --git a/frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.ts b/frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.ts new file mode 100644 index 000000000..2316c996d --- /dev/null +++ b/frontend/src/app/components/acceleration/sparkles/acceleration-sparkles.component.ts @@ -0,0 +1,73 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input, OnChanges, SimpleChanges, ViewChild } from '@angular/core'; + +@Component({ + selector: 'app-acceleration-sparkles', + templateUrl: './acceleration-sparkles.component.html', + styleUrls: ['./acceleration-sparkles.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AccelerationSparklesComponent implements OnChanges { + @Input() arrow: ElementRef; + @Input() run: boolean = false; + + @ViewChild('sparkleAnchor') + sparkleAnchor: ElementRef; + + constructor( + private cd: ChangeDetectorRef, + ) {} + + endTimeout: any; + lastSparkle: number = 0; + sparkleWidth: number = 0; + sparkles: any[] = []; + + ngOnChanges(changes: SimpleChanges): void { + if (changes.run) { + if (this.endTimeout) { + clearTimeout(this.endTimeout); + this.endTimeout = null; + } + if (this.run) { + this.doSparkle(); + } else { + this.endTimeout = setTimeout(() => { + this.sparkles = []; + }, 2000); + } + } + } + + doSparkle(): void { + if (this.run) { + const now = performance.now(); + if (now - this.lastSparkle > 20) { + this.lastSparkle = now; + if (this.arrow?.nativeElement && this.sparkleAnchor?.nativeElement) { + const anchor = this.sparkleAnchor.nativeElement.getBoundingClientRect().right; + const right = this.arrow.nativeElement.getBoundingClientRect().right; + const dx = (anchor - right) + 30; + const numSparkles = Math.ceil(Math.random() * 3); + for (let i = 0; i < numSparkles; i++) { + this.sparkles.push({ + style: { + right: (dx + (Math.random() * 10)) + 'px', + top: (15 + (Math.random() * 30)) + 'px', + }, + rotation: { + transform: `rotate(${Math.random() * 360}deg)`, + } + }); + } + while (this.sparkles.length > 200) { + this.sparkles.shift(); + } + this.cd.markForCheck(); + } + } + requestAnimationFrame(() => { + this.doSparkle(); + }); + } + } +} \ No newline at end of file diff --git a/frontend/src/app/components/address-graph/address-graph.component.ts b/frontend/src/app/components/address-graph/address-graph.component.ts index 388c5eb00..1b320a38a 100644 --- a/frontend/src/app/components/address-graph/address-graph.component.ts +++ b/frontend/src/app/components/address-graph/address-graph.component.ts @@ -1,16 +1,15 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, NgZone, OnChanges, OnDestroy, SimpleChanges } from '@angular/core'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { BehaviorSubject, Observable, Subscription, combineLatest, of } from 'rxjs'; import { catchError, map, switchMap, tap } from 'rxjs/operators'; -import { AddressTxSummary, ChainStats } from '../../interfaces/electrs.interface'; -import { ElectrsApiService } from '../../services/electrs-api.service'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; +import { AddressTxSummary, ChainStats } from '@interfaces/electrs.interface'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; import { Router } from '@angular/router'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { StateService } from '../../services/state.service'; -import { PriceService } from '../../services/price.service'; -import { FiatCurrencyPipe } from '../../shared/pipes/fiat-currency.pipe'; -import { FiatShortenerPipe } from '../../shared/pipes/fiat-shortener.pipe'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; +import { PriceService } from '@app/services/price.service'; +import { FiatCurrencyPipe } from '@app/shared/pipes/fiat-currency.pipe'; const periodSeconds = { '1d': (60 * 60 * 24), @@ -30,7 +29,7 @@ const periodSeconds = { position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, @@ -45,6 +44,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { @Input() right: number | string = 10; @Input() left: number | string = 70; @Input() widget: boolean = false; + @Input() defaultFiat: boolean = false; data: any[] = []; fiatData: any[] = []; @@ -77,7 +77,6 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { private relativeUrlPipe: RelativeUrlPipe, private priceService: PriceService, private fiatCurrencyPipe: FiatCurrencyPipe, - private fiatShortenerPipe: FiatShortenerPipe, private zone: NgZone, ) {} @@ -86,6 +85,9 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { if (!this.addressSummary$ && (!this.address || !this.stats)) { return; } + if (changes.defaultFiat) { + this.selected['Fiat'] = !!this.defaultFiat; + } if (changes.address || changes.isPubkey || changes.addressSummary$ || changes.stats) { if (this.subscription) { this.subscription.unsubscribe(); @@ -147,7 +149,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { if (!summary) { return; } - + const total = this.stats ? (this.stats.funded_txo_sum - this.stats.spent_txo_sum) : summary.reduce((acc, tx) => acc + tx.value, 0); let runningTotal = total; const processData = summary.map(d => { @@ -161,7 +163,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { d }; }).reverse(); - + this.data = processData.filter(({ d }) => d.txid !== undefined).map(({ time, balance, d }) => [time, balance, d]); this.fiatData = processData.map(({ time, fiatBalance, balance, d }) => [time, fiatBalance, d, balance]); @@ -179,6 +181,9 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { const maxValue = this.data.reduce((acc, d) => Math.max(acc, Math.abs(d[1] ?? d.value[1])), 0); const minValue = this.data.reduce((acc, d) => Math.min(acc, Math.abs(d[1] ?? d.value[1])), maxValue); + this.right = this.selected['Fiat'] ? +this.initialRight + 40 : this.initialRight; + this.left = this.selected[$localize`:@@7e69426bd97a606d8ae6026762858e6e7c86a1fd:Balance`] ? this.initialLeft : +this.initialLeft - 40; + this.chartOptions = { color: [ new echarts.graphic.LinearGradient(0, 0, 0, 1, [ @@ -245,21 +250,22 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { let tooltip = '
'; const hasTx = data[0].data[2].txid; + const date = new Date(data[0].data[0]).toLocaleTimeString(this.locale, { year: 'numeric', month: 'short', day: 'numeric' }); + + tooltip += `
+
+
${date}
`; + if (hasTx) { const header = data.length === 1 ? `${data[0].data[2].txid.slice(0, 6)}...${data[0].data[2].txid.slice(-6)}` : `${data.length} transactions`; - tooltip += `${header}`; + tooltip += `
${header}
`; } - - const date = new Date(data[0].data[0]).toLocaleTimeString(this.locale, { year: 'numeric', month: 'short', day: 'numeric' }); - - tooltip += `
-
`; - + const formatBTC = (val, decimal) => (val / 100_000_000).toFixed(decimal); const formatFiat = (val) => this.fiatCurrencyPipe.transform(val, null, 'USD'); - + const btcVal = btcData.reduce((total, d) => total + d.data[2].value, 0); const fiatVal = fiatData.reduce((total, d) => total + d.data[2].value * d.data[2].price / 100_000_000, 0); const btcColor = btcVal === 0 ? '' : (btcVal > 0 ? 'var(--green)' : 'var(--red)'); @@ -291,7 +297,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { } } - tooltip += `
${date}
`; + tooltip += `
`; return tooltip; }.bind(this) }, @@ -311,18 +317,21 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { formatter: (val): string => { let valSpan = maxValue - (this.period === 'all' ? 0 : minValue); if (valSpan > 100_000_000_000) { - return `${this.amountShortenerPipe.transform(Math.round(val / 100_000_000), 0)} BTC`; + return `${this.amountShortenerPipe.transform(Math.round(val / 100_000_000), 0, undefined, true)} BTC`; } else if (valSpan > 1_000_000_000) { - return `${this.amountShortenerPipe.transform(Math.round(val / 100_000_000), 2)} BTC`; + return `${this.amountShortenerPipe.transform(Math.round(val / 100_000_000), 2, undefined, true)} BTC`; } else if (valSpan > 100_000_000) { return `${(val / 100_000_000).toFixed(1)} BTC`; } else if (valSpan > 10_000_000) { return `${(val / 100_000_000).toFixed(2)} BTC`; } else if (valSpan > 1_000_000) { + if (maxValue > 100_000_000_000) { + return `${this.amountShortenerPipe.transform(Math.round(val / 100_000_000), 3, undefined, true)} BTC`; + } return `${(val / 100_000_000).toFixed(3)} BTC`; } else { - return `${this.amountShortenerPipe.transform(val, 0)} sats`; + return `${this.amountShortenerPipe.transform(val, 0, undefined, true)} sats`; } } }, @@ -336,7 +345,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { axisLabel: { color: 'rgb(110, 112, 121)', formatter: function(val) { - return this.fiatShortenerPipe.transform(val, null, 'USD'); + return `$${this.amountShortenerPipe.transform(val, 0, undefined, true)}`; }.bind(this) }, splitLine: { @@ -440,7 +449,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { right: this.right, }] : undefined }; - + if (this.chartInstance) { this.chartInstance.setOption(this.chartOptions); } diff --git a/frontend/src/app/components/address-group/address-group.component.ts b/frontend/src/app/components/address-group/address-group.component.ts index 30bee7543..560308592 100644 --- a/frontend/src/app/components/address-group/address-group.component.ts +++ b/frontend/src/app/components/address-group/address-group.component.ts @@ -1,15 +1,15 @@ import { Component, OnInit, OnDestroy, ChangeDetectorRef, HostListener } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, catchError } from 'rxjs/operators'; -import { Address, Transaction } from '../../interfaces/electrs.interface'; -import { WebsocketService } from '../../services/websocket.service'; -import { StateService } from '../../services/state.service'; -import { AudioService } from '../../services/audio.service'; -import { ApiService } from '../../services/api.service'; +import { Address, Transaction } from '@interfaces/electrs.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { AudioService } from '@app/services/audio.service'; +import { ApiService } from '@app/services/api.service'; import { of, Subscription, forkJoin } from 'rxjs'; -import { SeoService } from '../../services/seo.service'; -import { AddressInformation } from '../../interfaces/node-api.interface'; +import { SeoService } from '@app/services/seo.service'; +import { AddressInformation } from '@interfaces/node-api.interface'; @Component({ selector: 'app-address-group', diff --git a/frontend/src/app/components/address-labels/address-labels.component.ts b/frontend/src/app/components/address-labels/address-labels.component.ts index dd81b9809..0669a22e4 100644 --- a/frontend/src/app/components/address-labels/address-labels.component.ts +++ b/frontend/src/app/components/address-labels/address-labels.component.ts @@ -1,7 +1,7 @@ import { Component, ChangeDetectionStrategy, Input, OnChanges } from '@angular/core'; -import { Vin, Vout } from '../../interfaces/electrs.interface'; -import { StateService } from '../../services/state.service'; -import { AddressType, AddressTypeInfo } from '../../shared/address-utils'; +import { Vin, Vout } from '@interfaces/electrs.interface'; +import { StateService } from '@app/services/state.service'; +import { AddressType, AddressTypeInfo } from '@app/shared/address-utils'; @Component({ selector: 'app-address-labels', @@ -55,7 +55,7 @@ export class AddressLabelsComponent implements OnChanges { } handleVin() { - const address = new AddressTypeInfo(this.network || 'mainnet', this.vin.prevout?.scriptpubkey_address, this.vin.prevout?.scriptpubkey_type as AddressType, [this.vin]) + const address = new AddressTypeInfo(this.network || 'mainnet', this.vin.prevout?.scriptpubkey_address, this.vin.prevout?.scriptpubkey_type as AddressType, [this.vin]); if (address?.scripts.size) { const script = address?.scripts.values().next().value; if (script.template?.label) { diff --git a/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts b/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts index 83424791b..ab9b124c3 100644 --- a/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts +++ b/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts @@ -1,9 +1,9 @@ import { Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core'; -import { StateService } from '../../services/state.service'; -import { Address, AddressTxSummary } from '../../interfaces/electrs.interface'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { StateService } from '@app/services/state.service'; +import { Address, AddressTxSummary } from '@interfaces/electrs.interface'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { Observable, Subscription, catchError, map, of, switchMap, zip } from 'rxjs'; -import { PriceService } from '../../services/price.service'; +import { PriceService } from '@app/services/price.service'; @Component({ selector: 'app-address-transactions-widget', diff --git a/frontend/src/app/components/address/address-preview.component.ts b/frontend/src/app/components/address/address-preview.component.ts index 9bc6e967f..bcc328787 100644 --- a/frontend/src/app/components/address/address-preview.component.ts +++ b/frontend/src/app/components/address/address-preview.component.ts @@ -1,16 +1,16 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, filter, catchError, map, tap } from 'rxjs/operators'; -import { Address, Transaction } from '../../interfaces/electrs.interface'; -import { StateService } from '../../services/state.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { AudioService } from '../../services/audio.service'; -import { ApiService } from '../../services/api.service'; +import { Address, Transaction } from '@interfaces/electrs.interface'; +import { StateService } from '@app/services/state.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { AudioService } from '@app/services/audio.service'; +import { ApiService } from '@app/services/api.service'; import { of, merge, Subscription, Observable } from 'rxjs'; -import { SeoService } from '../../services/seo.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { AddressInformation } from '../../interfaces/node-api.interface'; +import { SeoService } from '@app/services/seo.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { AddressInformation } from '@interfaces/node-api.interface'; @Component({ selector: 'app-address-preview', diff --git a/frontend/src/app/components/address/address.component.html b/frontend/src/app/components/address/address.component.html index 31dff2fa5..41d8c151f 100644 --- a/frontend/src/app/components/address/address.component.html +++ b/frontend/src/app/components/address/address.component.html @@ -94,6 +94,20 @@
+ +
+
+

Unspent Outputs

+
+
+
+
+ +
+
+
+
+

@@ -103,7 +117,7 @@

- +
diff --git a/frontend/src/app/components/address/address.component.ts b/frontend/src/app/components/address/address.component.ts index 105863a4e..8786f46ee 100644 --- a/frontend/src/app/components/address/address.component.ts +++ b/frontend/src/app/components/address/address.component.ts @@ -1,17 +1,17 @@ import { Component, OnInit, OnDestroy, HostListener } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, filter, catchError, map, tap } from 'rxjs/operators'; -import { Address, ChainStats, Transaction, Vin } from '../../interfaces/electrs.interface'; -import { WebsocketService } from '../../services/websocket.service'; -import { StateService } from '../../services/state.service'; -import { AudioService } from '../../services/audio.service'; -import { ApiService } from '../../services/api.service'; -import { of, merge, Subscription, Observable } from 'rxjs'; -import { SeoService } from '../../services/seo.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { AddressInformation } from '../../interfaces/node-api.interface'; -import { AddressTypeInfo } from '../../shared/address-utils'; +import { Address, ChainStats, Transaction, Utxo, Vin } from '@interfaces/electrs.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { AudioService } from '@app/services/audio.service'; +import { ApiService } from '@app/services/api.service'; +import { of, merge, Subscription, Observable, forkJoin } from 'rxjs'; +import { SeoService } from '@app/services/seo.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { AddressInformation } from '@interfaces/node-api.interface'; +import { AddressTypeInfo } from '@app/shared/address-utils'; class AddressStats implements ChainStats { address: string; @@ -104,6 +104,7 @@ export class AddressComponent implements OnInit, OnDestroy { addressString: string; isLoadingAddress = true; transactions: Transaction[]; + utxos: Utxo[]; isLoadingTransactions = true; retryLoadMore = false; error: any; @@ -159,6 +160,7 @@ export class AddressComponent implements OnInit, OnDestroy { this.address = null; this.isLoadingTransactions = true; this.transactions = null; + this.utxos = null; this.addressInfo = null; this.exampleChannel = null; document.body.scrollTo(0, 0); @@ -212,11 +214,23 @@ export class AddressComponent implements OnInit, OnDestroy { this.updateChainStats(); this.isLoadingAddress = false; this.isLoadingTransactions = true; - return address.is_pubkey + const utxoCount = this.chainStats.utxos + this.mempoolStats.utxos; + return forkJoin([ + address.is_pubkey ? this.electrsApiService.getScriptHashTransactions$((address.address.length === 66 ? '21' : '41') + address.address + 'ac') - : this.electrsApiService.getAddressTransactions$(address.address); + : this.electrsApiService.getAddressTransactions$(address.address), + (utxoCount > 2 && utxoCount <= 500 ? (address.is_pubkey + ? this.electrsApiService.getScriptHashUtxos$((address.address.length === 66 ? '21' : '41') + address.address + 'ac') + : this.electrsApiService.getAddressUtxos$(address.address)) : of(null)).pipe( + catchError(() => { + return of(null); + }) + ) + ]); }), - switchMap((transactions) => { + switchMap(([transactions, utxos]) => { + this.utxos = utxos; + this.tempTransactions = transactions; if (transactions.length) { this.lastTransactionTxId = transactions[transactions.length - 1].txid; @@ -309,6 +323,7 @@ export class AddressComponent implements OnInit, OnDestroy { this.transactions = this.transactions.slice(); this.mempoolStats.removeTx(transaction); this.audioService.playSound('magic'); + this.confirmTransaction(tx); } else { if (this.addTransaction(transaction, false)) { this.audioService.playSound('magic'); @@ -334,6 +349,31 @@ export class AddressComponent implements OnInit, OnDestroy { } } + // update utxos in-place + if (this.utxos != null) { + let utxosChanged = false; + for (const vin of transaction.vin) { + const utxoIndex = this.utxos.findIndex((utxo) => utxo.txid === vin.txid && utxo.vout === vin.vout); + if (utxoIndex !== -1) { + this.utxos.splice(utxoIndex, 1); + utxosChanged = true; + } + } + for (const [index, vout] of transaction.vout.entries()) { + if (vout.scriptpubkey_address === this.address.address) { + this.utxos.push({ + txid: transaction.txid, + vout: index, + value: vout.value, + status: JSON.parse(JSON.stringify(transaction.status)), + }); + utxosChanged = true; + } + } + if (utxosChanged) { + this.utxos = this.utxos.slice(); + } + } return true; } @@ -346,9 +386,65 @@ export class AddressComponent implements OnInit, OnDestroy { this.transactions.splice(index, 1); this.transactions = this.transactions.slice(); + // update utxos in-place + if (this.utxos != null) { + let utxosChanged = false; + for (const vin of transaction.vin) { + if (vin.prevout?.scriptpubkey_address === this.address.address) { + this.utxos.push({ + txid: vin.txid, + vout: vin.vout, + value: vin.prevout.value, + status: { confirmed: true }, // Assuming the input was confirmed + }); + utxosChanged = true; + } + } + for (const [index, vout] of transaction.vout.entries()) { + if (vout.scriptpubkey_address === this.address.address) { + const utxoIndex = this.utxos.findIndex((utxo) => utxo.txid === transaction.txid && utxo.vout === index); + if (utxoIndex !== -1) { + this.utxos.splice(utxoIndex, 1); + utxosChanged = true; + } + } + } + if (utxosChanged) { + this.utxos = this.utxos.slice(); + } + } + return true; } + confirmTransaction(transaction: Transaction): void { + // update utxos in-place + if (this.utxos != null) { + let utxosChanged = false; + for (const vin of transaction.vin) { + if (vin.prevout?.scriptpubkey_address === this.address.address) { + const utxoIndex = this.utxos.findIndex((utxo) => utxo.txid === vin.txid && utxo.vout === vin.vout); + if (utxoIndex !== -1) { + this.utxos[utxoIndex].status = JSON.parse(JSON.stringify(transaction.status)); + utxosChanged = true; + } + } + } + for (const [index, vout] of transaction.vout.entries()) { + if (vout.scriptpubkey_address === this.address.address) { + const utxoIndex = this.utxos.findIndex((utxo) => utxo.txid === transaction.txid && utxo.vout === index); + if (utxoIndex !== -1) { + this.utxos[utxoIndex].status = JSON.parse(JSON.stringify(transaction.status)); + utxosChanged = true; + } + } + } + if (utxosChanged) { + this.utxos = this.utxos.slice(); + } + } + } + loadMore(): void { if (this.isLoadingTransactions || this.fullyLoaded) { return; diff --git a/frontend/src/app/components/addresses-treemap/addresses-treemap.component.html b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.html new file mode 100644 index 000000000..1c44f9aa3 --- /dev/null +++ b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.html @@ -0,0 +1,10 @@ +
+
+
+
+
+ +
+
+
+
diff --git a/frontend/src/app/components/addresses-treemap/addresses-treemap.component.scss b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.scss new file mode 100644 index 000000000..78510203f --- /dev/null +++ b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.scss @@ -0,0 +1,17 @@ +.node-channels-container { + position: relative; +} + +.loading-spinner { + position: absolute; + top: 0; + left: 0; + right: 0; + width: 100%; + z-index: 100; +} + +.spinner-border { + position: relative; + top: 225px; +} \ No newline at end of file diff --git a/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts new file mode 100644 index 000000000..5ff3cf502 --- /dev/null +++ b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts @@ -0,0 +1,150 @@ +import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, NgZone, OnChanges } from '@angular/core'; +import { Router } from '@angular/router'; +import { EChartsOption, TreemapSeriesOption } from '@app/graphs/echarts'; +import { lerpColor } from '@app/shared/graphs.utils'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; +import { Address } from '@interfaces/electrs.interface'; +import { formatNumber } from '@angular/common'; + +@Component({ + selector: 'app-addresses-treemap', + templateUrl: './addresses-treemap.component.html', + styleUrls: ['./addresses-treemap.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AddressesTreemap implements OnChanges { + @Input() addresses: Address[]; + @Input() isLoading: boolean = false; + + chartInstance: any; + chartOptions: EChartsOption = {}; + chartInitOptions = { + renderer: 'svg', + }; + + constructor( + @Inject(LOCALE_ID) public locale: string, + private lightningApiService: LightningApiService, + private amountShortenerPipe: AmountShortenerPipe, + private zone: NgZone, + private router: Router, + public stateService: StateService, + ) {} + + ngOnChanges(): void { + this.prepareChartOptions(); + } + + prepareChartOptions(): void { + const data = this.addresses.map(address => ({ + address: address.address, + value: address.chain_stats.funded_txo_sum - address.chain_stats.spent_txo_sum, + stats: address.chain_stats, + })); + // only consider visible items for the color gradient + const totalValue = data.reduce((acc, address) => acc + address.value, 0); + const maxTxs = data.filter(address => address.value > (totalValue / 2000)).reduce((max, address) => Math.max(max, address.stats.tx_count), 0); + const dataItems = data.map(address => ({ + ...address, + itemStyle: { + color: lerpColor('#1E88E5', '#D81B60', address.stats.tx_count / maxTxs), + } + })); + this.chartOptions = { + tooltip: { + trigger: 'item', + textStyle: { + align: 'left', + } + }, + series: [ + { + height: 300, + left: 0, + right: 0, + bottom: 0, + top: 0, + roam: false, + type: 'treemap', + data: dataItems, + nodeClick: 'link', + progressive: 100, + tooltip: { + show: true, + backgroundColor: 'rgba(17, 19, 31, 1)', + borderRadius: 4, + shadowColor: 'rgba(0, 0, 0, 0.5)', + textStyle: { + color: '#b1b1b1', + }, + borderColor: '#000', + formatter: (value): string => { + if (!value.data.address) { + return ''; + } + return ` +
Accelerated to
- @if (accelerationInfo?.acceleratedFeeRate && (!tx.effectiveFeePerVsize || accelerationInfo.acceleratedFeeRate >= tx.effectiveFeePerVsize)) { - + @if (accelerationInfo?.acceleratedFeeRate && (!effectiveFeeRate || accelerationInfo.acceleratedFeeRate >= effectiveFeeRate)) { + } @else { - + }
@if (hasCpfp) { - + }
@@ -36,7 +36,7 @@
- +
+ + + + + + + + + + + + + + + + + + + + + +
${value.data.address}
Received${this.formatValue(value.data.stats.funded_txo_sum)}
Sent${this.formatValue(value.data.stats.spent_txo_sum)}
Balance${this.formatValue(value.data.stats.funded_txo_sum - value.data.stats.spent_txo_sum)}
Transaction count${value.data.stats.tx_count}
+ `; + } + }, + itemStyle: { + borderColor: 'black', + borderWidth: 1, + }, + breadcrumb: { + show: false, + } + } + ] + }; + } + + formatValue(sats: number): string { + if (sats > 100000000) { + return formatNumber(sats / 100000000, this.locale, '1.2-2') + ' BTC'; + } else { + return this.amountShortenerPipe.transform(sats, 2) + ' sats'; + } + } + + onChartInit(ec: any): void { + this.chartInstance = ec; + + this.chartInstance.on('click', (e) => { + //@ts-ignore + if (!e.data.address) { + return; + } + this.zone.run(() => { + //@ts-ignore + const url = new RelativeUrlPipe(this.stateService).transform(`/address/${e.data.address}`); + this.router.navigate([url]); + }); + }); + } +} diff --git a/frontend/src/app/components/amount-selector/amount-selector.component.html b/frontend/src/app/components/amount-selector/amount-selector.component.html new file mode 100644 index 000000000..a16a24d4f --- /dev/null +++ b/frontend/src/app/components/amount-selector/amount-selector.component.html @@ -0,0 +1,7 @@ +
+ +
diff --git a/frontend/src/app/components/amount-selector/amount-selector.component.scss b/frontend/src/app/components/amount-selector/amount-selector.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/src/app/components/amount-selector/amount-selector.component.ts b/frontend/src/app/components/amount-selector/amount-selector.component.ts new file mode 100644 index 000000000..e22542eb3 --- /dev/null +++ b/frontend/src/app/components/amount-selector/amount-selector.component.ts @@ -0,0 +1,36 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { StorageService } from '@app/services/storage.service'; +import { StateService } from '@app/services/state.service'; + +@Component({ + selector: 'app-amount-selector', + templateUrl: './amount-selector.component.html', + styleUrls: ['./amount-selector.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class AmountSelectorComponent implements OnInit { + amountForm: UntypedFormGroup; + modes = ['btc', 'sats', 'fiat']; + + constructor( + private formBuilder: UntypedFormBuilder, + private stateService: StateService, + private storageService: StorageService, + ) { } + + ngOnInit() { + this.amountForm = this.formBuilder.group({ + mode: ['btc'] + }); + this.stateService.viewAmountMode$.subscribe((mode) => { + this.amountForm.get('mode')?.setValue(mode); + }); + } + + changeMode() { + const newMode = this.amountForm.get('mode')?.value; + this.storageService.setValue('view-amount-mode', newMode); + this.stateService.viewAmountMode$.next(newMode); + } +} diff --git a/frontend/src/app/components/amount/amount.component.html b/frontend/src/app/components/amount/amount.component.html index b513c89d2..cbbdb2dd9 100644 --- a/frontend/src/app/components/amount/amount.component.html +++ b/frontend/src/app/components/amount/amount.component.html @@ -30,7 +30,7 @@ @if (digitsInfo === '1.8-8') { ‎{{ addPlus && satoshis >= 0 ? '+' : '' }}{{ satoshis | number }} } @else { - ‎{{ addPlus && satoshis >= 0 ? '+' : '' }}{{ satoshis | amountShortener : satoshis < 1000 && satoshis > -1000 ? 0 : 1 }} + ‎{{ addPlus && satoshis >= 0 ? '+' : '' }}{{ satoshis | amountShortener : (satoshis < 1000 && satoshis > -1000 ? 0 : 1) : undefined : true }} } sats diff --git a/frontend/src/app/components/amount/amount.component.ts b/frontend/src/app/components/amount/amount.component.ts index 93715f3c0..bf40a7567 100644 --- a/frontend/src/app/components/amount/amount.component.ts +++ b/frontend/src/app/components/amount/amount.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit, OnDestroy, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; import { Observable, Subscription } from 'rxjs'; -import { Price } from '../../services/price.service'; +import { Price } from '@app/services/price.service'; @Component({ selector: 'app-amount', diff --git a/frontend/src/app/components/app/app.component.ts b/frontend/src/app/components/app/app.component.ts index 453276966..365c23972 100644 --- a/frontend/src/app/components/app/app.component.ts +++ b/frontend/src/app/components/app/app.component.ts @@ -1,11 +1,11 @@ import { Location } from '@angular/common'; import { Component, HostListener, OnInit, Inject, LOCALE_ID, HostBinding } from '@angular/core'; import { Router, NavigationEnd } from '@angular/router'; -import { StateService } from '../../services/state.service'; -import { OpenGraphService } from '../../services/opengraph.service'; +import { StateService } from '@app/services/state.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; import { NgbTooltipConfig } from '@ng-bootstrap/ng-bootstrap'; -import { ThemeService } from '../../services/theme.service'; -import { SeoService } from '../../services/seo.service'; +import { ThemeService } from '@app/services/theme.service'; +import { SeoService } from '@app/services/seo.service'; @Component({ selector: 'app-root', diff --git a/frontend/src/app/components/asset-circulation/asset-circulation.component.ts b/frontend/src/app/components/asset-circulation/asset-circulation.component.ts index cc09c4809..ab41492b0 100644 --- a/frontend/src/app/components/asset-circulation/asset-circulation.component.ts +++ b/frontend/src/app/components/asset-circulation/asset-circulation.component.ts @@ -1,10 +1,10 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core'; import { combineLatest, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { moveDec } from '../../bitcoin.utils'; -import { AssetsService } from '../../services/assets.service'; -import { ElectrsApiService } from '../../services/electrs-api.service'; -import { environment } from '../../../environments/environment'; +import { moveDec } from '@app/bitcoin.utils'; +import { AssetsService } from '@app/services/assets.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; +import { environment } from '@environments/environment'; @Component({ selector: 'app-asset-circulation', diff --git a/frontend/src/app/components/asset/asset.component.ts b/frontend/src/app/components/asset/asset.component.ts index dd09468cc..30bbd594b 100644 --- a/frontend/src/app/components/asset/asset.component.ts +++ b/frontend/src/app/components/asset/asset.component.ts @@ -1,17 +1,17 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, filter, catchError, take } from 'rxjs/operators'; -import { Asset, Transaction } from '../../interfaces/electrs.interface'; -import { WebsocketService } from '../../services/websocket.service'; -import { StateService } from '../../services/state.service'; -import { AudioService } from '../../services/audio.service'; -import { ApiService } from '../../services/api.service'; +import { Asset, Transaction } from '@interfaces/electrs.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { AudioService } from '@app/services/audio.service'; +import { ApiService } from '@app/services/api.service'; import { of, merge, Subscription, combineLatest } from 'rxjs'; -import { SeoService } from '../../services/seo.service'; -import { environment } from '../../../environments/environment'; -import { AssetsService } from '../../services/assets.service'; -import { moveDec } from '../../bitcoin.utils'; +import { SeoService } from '@app/services/seo.service'; +import { environment } from '@environments/environment'; +import { AssetsService } from '@app/services/assets.service'; +import { moveDec } from '@app/bitcoin.utils'; @Component({ selector: 'app-asset', diff --git a/frontend/src/app/components/assets/asset-group/asset-group.component.ts b/frontend/src/app/components/assets/asset-group/asset-group.component.ts index 27e048558..3294eed70 100644 --- a/frontend/src/app/components/assets/asset-group/asset-group.component.ts +++ b/frontend/src/app/components/assets/asset-group/asset-group.component.ts @@ -2,8 +2,8 @@ import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { combineLatest, Observable } from 'rxjs'; import { map, switchMap } from 'rxjs/operators'; -import { ApiService } from '../../../services/api.service'; -import { AssetsService } from '../../../services/assets.service'; +import { ApiService } from '@app/services/api.service'; +import { AssetsService } from '@app/services/assets.service'; @Component({ selector: 'app-asset-group', diff --git a/frontend/src/app/components/assets/assets-featured/assets-featured.component.ts b/frontend/src/app/components/assets/assets-featured/assets-featured.component.ts index a9bf305f6..de6a0e524 100644 --- a/frontend/src/app/components/assets/assets-featured/assets-featured.component.ts +++ b/frontend/src/app/components/assets/assets-featured/assets-featured.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { ApiService } from '../../../services/api.service'; -import { StateService } from '../../../services/state.service'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-assets-featured', diff --git a/frontend/src/app/components/assets/assets-nav/assets-nav.component.ts b/frontend/src/app/components/assets/assets-nav/assets-nav.component.ts index c9b044b34..fb280631a 100644 --- a/frontend/src/app/components/assets/assets-nav/assets-nav.component.ts +++ b/frontend/src/app/components/assets/assets-nav/assets-nav.component.ts @@ -4,12 +4,12 @@ import { Router } from '@angular/router'; import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap'; import { merge, Observable, of, Subject } from 'rxjs'; import { distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators'; -import { AssetExtended } from '../../../interfaces/electrs.interface'; -import { AssetsService } from '../../../services/assets.service'; -import { SeoService } from '../../../services/seo.service'; -import { StateService } from '../../../services/state.service'; -import { RelativeUrlPipe } from '../../../shared/pipes/relative-url/relative-url.pipe'; -import { environment } from '../../../../environments/environment'; +import { AssetExtended } from '@interfaces/electrs.interface'; +import { AssetsService } from '@app/services/assets.service'; +import { SeoService } from '@app/services/seo.service'; +import { StateService } from '@app/services/state.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { environment } from '@environments/environment'; @Component({ selector: 'app-assets-nav', diff --git a/frontend/src/app/components/assets/assets.component.ts b/frontend/src/app/components/assets/assets.component.ts index 85d236bca..6a573fcd6 100644 --- a/frontend/src/app/components/assets/assets.component.ts +++ b/frontend/src/app/components/assets/assets.component.ts @@ -1,13 +1,13 @@ import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core'; -import { AssetsService } from '../../services/assets.service'; -import { environment } from '../../../environments/environment'; +import { AssetsService } from '@app/services/assets.service'; +import { environment } from '@environments/environment'; import { UntypedFormGroup } from '@angular/forms'; import { filter, map, switchMap, take } from 'rxjs/operators'; import { ActivatedRoute, Router } from '@angular/router'; import { combineLatest, Observable } from 'rxjs'; -import { AssetExtended } from '../../interfaces/electrs.interface'; -import { SeoService } from '../../services/seo.service'; -import { StateService } from '../../services/state.service'; +import { AssetExtended } from '@interfaces/electrs.interface'; +import { SeoService } from '@app/services/seo.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-assets', diff --git a/frontend/src/app/components/balance-widget/balance-widget.component.ts b/frontend/src/app/components/balance-widget/balance-widget.component.ts index f830587cc..bd92a2eb9 100644 --- a/frontend/src/app/components/balance-widget/balance-widget.component.ts +++ b/frontend/src/app/components/balance-widget/balance-widget.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core'; -import { StateService } from '../../services/state.service'; -import { Address, AddressTxSummary } from '../../interfaces/electrs.interface'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { StateService } from '@app/services/state.service'; +import { Address, AddressTxSummary } from '@interfaces/electrs.interface'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { Observable, catchError, of } from 'rxjs'; @Component({ diff --git a/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.ts b/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.ts index 067061678..f931f2c31 100644 --- a/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.ts +++ b/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.ts @@ -4,7 +4,7 @@ import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; import { ActivatedRoute } from '@angular/router'; import { Subscription, of, timer } from 'rxjs'; import { filter, repeat, retry, switchMap, take, tap } from 'rxjs/operators'; -import { ServicesApiServices } from '../../services/services-api.service'; +import { ServicesApiServices } from '@app/services/services-api.service'; @Component({ selector: 'app-bitcoin-invoice', diff --git a/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts b/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts index ba3489e17..07361ef42 100644 --- a/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts +++ b/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1,17 +1,17 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, NgZone, OnInit } from '@angular/core'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { Observable, combineLatest, of } from 'rxjs'; import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../shared/graphs.utils'; -import { StorageService } from '../../services/storage.service'; -import { MiningService } from '../../services/mining.service'; -import { selectPowerOfTen } from '../../bitcoin.utils'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { StateService } from '../../services/state.service'; +import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '@app/shared/graphs.utils'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; +import { selectPowerOfTen } from '@app/bitcoin.utils'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; import { ActivatedRoute, Router } from '@angular/router'; @Component({ @@ -23,7 +23,7 @@ import { ActivatedRoute, Router } from '@angular/router'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/block-fees-graph/block-fees-graph.component.ts b/frontend/src/app/components/block-fees-graph/block-fees-graph.component.ts index eb567c2a6..c2dea11aa 100644 --- a/frontend/src/app/components/block-fees-graph/block-fees-graph.component.ts +++ b/frontend/src/app/components/block-fees-graph/block-fees-graph.component.ts @@ -1,18 +1,18 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { download, formatterXAxis } from '../../shared/graphs.utils'; -import { StorageService } from '../../services/storage.service'; -import { MiningService } from '../../services/mining.service'; +import { download, formatterXAxis } from '@app/shared/graphs.utils'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; import { ActivatedRoute } from '@angular/router'; -import { FiatShortenerPipe } from '../../shared/pipes/fiat-shortener.pipe'; -import { FiatCurrencyPipe } from '../../shared/pipes/fiat-currency.pipe'; -import { StateService } from '../../services/state.service'; +import { FiatShortenerPipe } from '@app/shared/pipes/fiat-shortener.pipe'; +import { FiatCurrencyPipe } from '@app/shared/pipes/fiat-currency.pipe'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-block-fees-graph', @@ -23,7 +23,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts b/frontend/src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts index 18e57ada8..deba874a7 100644 --- a/frontend/src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts +++ b/frontend/src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts @@ -1,19 +1,19 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Inject, Input, LOCALE_ID, NgZone, OnInit } from '@angular/core'; -import { EChartsOption } from '../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { catchError, map, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { download, formatterXAxis } from '../../shared/graphs.utils'; +import { download, formatterXAxis } from '@app/shared/graphs.utils'; import { ActivatedRoute, Router } from '@angular/router'; -import { FiatShortenerPipe } from '../../shared/pipes/fiat-shortener.pipe'; -import { FiatCurrencyPipe } from '../../shared/pipes/fiat-currency.pipe'; -import { StateService } from '../../services/state.service'; -import { MiningService } from '../../services/mining.service'; -import { StorageService } from '../../services/storage.service'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { FiatShortenerPipe } from '@app/shared/pipes/fiat-shortener.pipe'; +import { FiatCurrencyPipe } from '@app/shared/pipes/fiat-currency.pipe'; +import { StateService } from '@app/services/state.service'; +import { MiningService } from '@app/services/mining.service'; +import { StorageService } from '@app/services/storage.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; @Component({ selector: 'app-block-fees-subsidy-graph', @@ -24,7 +24,7 @@ import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pi position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/block-filters/block-filters.component.html b/frontend/src/app/components/block-filters/block-filters.component.html index 2a22681d6..be692cfa9 100644 --- a/frontend/src/app/components/block-filters/block-filters.component.html +++ b/frontend/src/app/components/block-filters/block-filters.component.html @@ -1,6 +1,5 @@
- - beta +
diff --git a/frontend/src/app/components/block-filters/block-filters.component.scss b/frontend/src/app/components/block-filters/block-filters.component.scss index 7cbc738b7..4312dd7b2 100644 --- a/frontend/src/app/components/block-filters/block-filters.component.scss +++ b/frontend/src/app/components/block-filters/block-filters.component.scss @@ -24,7 +24,6 @@ display: flex; flex-direction: row; align-items: center; - float: right; &:hover, &:active { text-decoration: none; diff --git a/frontend/src/app/components/block-filters/block-filters.component.ts b/frontend/src/app/components/block-filters/block-filters.component.ts index 7f997617c..2a0c0772a 100644 --- a/frontend/src/app/components/block-filters/block-filters.component.ts +++ b/frontend/src/app/components/block-filters/block-filters.component.ts @@ -1,6 +1,6 @@ import { Component, EventEmitter, Output, HostListener, Input, ChangeDetectorRef, OnChanges, SimpleChanges, OnInit, OnDestroy } from '@angular/core'; -import { ActiveFilter, FilterGroups, FilterMode, GradientMode, TransactionFilters } from '../../shared/filters.utils'; -import { StateService } from '../../services/state.service'; +import { ActiveFilter, FilterGroups, FilterMode, GradientMode, TransactionFilters } from '@app/shared/filters.utils'; +import { StateService } from '@app/services/state.service'; import { Subscription } from 'rxjs'; @@ -115,4 +115,4 @@ export class BlockFiltersComponent implements OnInit, OnChanges, OnDestroy { ngOnDestroy(): void { this.filterSubscription.unsubscribe(); } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/block-health-graph/block-health-graph.component.ts b/frontend/src/app/components/block-health-graph/block-health-graph.component.ts index 59f34cd45..8d893a85f 100644 --- a/frontend/src/app/components/block-health-graph/block-health-graph.component.ts +++ b/frontend/src/app/components/block-health-graph/block-health-graph.component.ts @@ -1,16 +1,16 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, NgZone, OnInit } from '@angular/core'; -import { EChartsOption } from '../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../shared/graphs.utils'; -import { StorageService } from '../../services/storage.service'; +import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '@app/shared/graphs.utils'; +import { StorageService } from '@app/services/storage.service'; import { ActivatedRoute, Router } from '@angular/router'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { StateService } from '../../services/state.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-block-health-graph', @@ -21,7 +21,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.html b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.html index 2ef07d12c..471257230 100644 --- a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.html +++ b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.html @@ -2,10 +2,12 @@
-
-
-
not available
-
+ @if (!disableSpinner) { +
+
+
not available
+
+ } flagSet || tx.flags > 0, false); if (filtersAvailable !== this.filtersAvailable) { this.setFilterFlags(); @@ -204,7 +206,7 @@ export class BlockOverviewGraphComponent implements AfterViewInit, OnDestroy, On this.filtersAvailable = filtersAvailable; if (this.scene) { this.clearUpdateQueue(); - this.scene.setup(transactions); + this.scene.setup(transactions, sort); this.readyNextFrame = true; this.start(); this.updateSearchHighlight(); diff --git a/frontend/src/app/components/block-overview-graph/block-scene.ts b/frontend/src/app/components/block-overview-graph/block-scene.ts index c59fcb7d4..575f45bd6 100644 --- a/frontend/src/app/components/block-overview-graph/block-scene.ts +++ b/frontend/src/app/components/block-overview-graph/block-scene.ts @@ -1,9 +1,9 @@ -import { FastVertexArray } from './fast-vertex-array'; -import TxView from './tx-view'; -import { TransactionStripped } from '../../interfaces/node-api.interface'; -import { Color, Position, Square, ViewUpdateParams } from './sprite-types'; -import { defaultColorFunction, contrastColorFunction } from './utils'; -import { ThemeService } from '../../services/theme.service'; +import { FastVertexArray } from '@components/block-overview-graph/fast-vertex-array'; +import TxView from '@components/block-overview-graph/tx-view'; +import { TransactionStripped } from '@interfaces/node-api.interface'; +import { Color, Position, Square, ViewUpdateParams } from '@components/block-overview-graph/sprite-types'; +import { defaultColorFunction, contrastColorFunction } from '@components/block-overview-graph/utils'; +import { ThemeService } from '@app/services/theme.service'; export default class BlockScene { scene: { count: number, offset: { x: number, y: number}}; @@ -88,16 +88,19 @@ export default class BlockScene { } // set up the scene with an initial set of transactions, without any transition animation - setup(txs: TransactionStripped[]) { + setup(txs: TransactionStripped[], sort: boolean = false) { // clean up any old transactions Object.values(this.txs).forEach(tx => { tx.destroy(); delete this.txs[tx.txid]; }); this.layout = new BlockLayout({ width: this.gridWidth, height: this.gridHeight }); - txs.forEach(tx => { - const txView = new TxView(tx, this); - this.txs[tx.txid] = txView; + let txViews = txs.map(tx => new TxView(tx, this)); + if (sort) { + txViews = txViews.sort(feeRateDescending); + } + txViews.forEach(txView => { + this.txs[txView.txid] = txView; this.place(txView); this.saveGridToScreenPosition(txView); this.applyTxUpdate(txView, { @@ -914,4 +917,4 @@ class BlockLayout { function feeRateDescending(a: TxView, b: TxView) { return b.feerate - a.feerate; -} \ No newline at end of file +} diff --git a/frontend/src/app/components/block-overview-graph/fast-vertex-array.ts b/frontend/src/app/components/block-overview-graph/fast-vertex-array.ts index bc0900238..42439ef8d 100644 --- a/frontend/src/app/components/block-overview-graph/fast-vertex-array.ts +++ b/frontend/src/app/components/block-overview-graph/fast-vertex-array.ts @@ -8,7 +8,7 @@ or compacting into a smaller Float32Array when there's space to do so. */ -import TxSprite from './tx-sprite'; +import TxSprite from '@components/block-overview-graph/tx-sprite'; export class FastVertexArray { length: number; diff --git a/frontend/src/app/components/block-overview-graph/tx-sprite.ts b/frontend/src/app/components/block-overview-graph/tx-sprite.ts index 75c1577fc..d713cbd77 100644 --- a/frontend/src/app/components/block-overview-graph/tx-sprite.ts +++ b/frontend/src/app/components/block-overview-graph/tx-sprite.ts @@ -1,5 +1,5 @@ -import { FastVertexArray } from './fast-vertex-array'; -import { InterpolatedAttribute, Attributes, OptionalAttributes, SpriteUpdateParams, Update } from './sprite-types'; +import { FastVertexArray } from '@components/block-overview-graph/fast-vertex-array'; +import { InterpolatedAttribute, Attributes, OptionalAttributes, SpriteUpdateParams, Update } from '@components/block-overview-graph/sprite-types'; const attribKeys = ['a', 'b', 't', 'v']; const updateKeys = ['x', 'y', 's', 'r', 'g', 'b', 'a']; diff --git a/frontend/src/app/components/block-overview-graph/tx-view.ts b/frontend/src/app/components/block-overview-graph/tx-view.ts index 742c305f5..53ce684ed 100644 --- a/frontend/src/app/components/block-overview-graph/tx-view.ts +++ b/frontend/src/app/components/block-overview-graph/tx-view.ts @@ -1,10 +1,10 @@ -import TxSprite from './tx-sprite'; -import { FastVertexArray } from './fast-vertex-array'; -import { SpriteUpdateParams, Square, Color, ViewUpdateParams } from './sprite-types'; -import { hexToColor } from './utils'; -import BlockScene from './block-scene'; -import { TransactionStripped } from '../../interfaces/node-api.interface'; -import { TransactionFlags } from '../../shared/filters.utils'; +import TxSprite from '@components/block-overview-graph/tx-sprite'; +import { FastVertexArray } from '@components/block-overview-graph/fast-vertex-array'; +import { SpriteUpdateParams, Square, Color, ViewUpdateParams } from '@components/block-overview-graph/sprite-types'; +import { hexToColor } from '@components/block-overview-graph/utils'; +import BlockScene from '@components/block-overview-graph/block-scene'; +import { TransactionStripped } from '@interfaces/node-api.interface'; +import { TransactionFlags } from '@app/shared/filters.utils'; const hoverTransitionTime = 300; const defaultHoverColor = hexToColor('1bd8f4'); @@ -33,7 +33,7 @@ export default class TxView implements TransactionStripped { flags: number; bigintFlags?: bigint | null = 0b00000100_00000000_00000000_00000000n; time?: number; - status?: 'found' | 'missing' | 'sigop' | 'fresh' | 'freshcpfp' | 'added' | 'prioritized' | 'censored' | 'selected' | 'rbf' | 'accelerated'; + status?: 'found' | 'missing' | 'sigop' | 'fresh' | 'freshcpfp' | 'added' | 'added_prioritized' | 'prioritized' | 'added_deprioritized' | 'deprioritized' | 'censored' | 'selected' | 'rbf' | 'accelerated'; context?: 'projected' | 'actual'; scene?: BlockScene; diff --git a/frontend/src/app/components/block-overview-graph/utils.ts b/frontend/src/app/components/block-overview-graph/utils.ts index 9a6d9da43..f051e9d51 100644 --- a/frontend/src/app/components/block-overview-graph/utils.ts +++ b/frontend/src/app/components/block-overview-graph/utils.ts @@ -1,6 +1,6 @@ -import { feeLevels, defaultMempoolFeeColors, contrastMempoolFeeColors } from '../../app.constants'; -import { Color } from './sprite-types'; -import TxView from './tx-view'; +import { feeLevels, defaultMempoolFeeColors, contrastMempoolFeeColors } from '@app/app.constants'; +import { Color } from '@components/block-overview-graph/sprite-types'; +import TxView from '@components/block-overview-graph/tx-view'; export function hexToColor(hex: string): Color { return { @@ -11,6 +11,10 @@ export function hexToColor(hex: string): Color { }; } +export function colorToHex(color: Color): string { + return [color.r, color.g, color.b].map(c => Math.round(c * 255).toString(16)).join(''); +} + export function desaturate(color: Color, amount: number): Color { const gray = (color.r + color.g + color.b) / 6; return { @@ -30,6 +34,15 @@ export function darken(color: Color, amount: number): Color { }; } +export function mix(color1: Color, color2: Color, amount: number): Color { + return { + r: color1.r * (1 - amount) + color2.r * amount, + g: color1.g * (1 - amount) + color2.g * amount, + b: color1.b * (1 - amount) + color2.b * amount, + a: color1.a * (1 - amount) + color2.a * amount, + }; +} + export function setOpacity(color: Color, opacity: number): Color { return { ...color, @@ -71,6 +84,7 @@ export const defaultAuditColors = { censored: hexToColor('f344df'), missing: darken(desaturate(hexToColor('f344df'), 0.3), 0.7), added: hexToColor('0099ff'), + added_prioritized: darken(desaturate(hexToColor('0099ff'), 0.15), 0.85), prioritized: darken(desaturate(hexToColor('0099ff'), 0.3), 0.7), accelerated: hexToColor('8f5ff6'), }; @@ -101,6 +115,7 @@ export const contrastAuditColors = { censored: hexToColor('ffa8ff'), missing: darken(desaturate(hexToColor('ffa8ff'), 0.3), 0.7), added: hexToColor('00bb98'), + added_prioritized: darken(desaturate(hexToColor('00bb98'), 0.15), 0.85), prioritized: darken(desaturate(hexToColor('00bb98'), 0.3), 0.7), accelerated: hexToColor('8f5ff6'), }; @@ -136,8 +151,14 @@ export function defaultColorFunction( return auditColors.missing; case 'added': return auditColors.added; + case 'added_prioritized': + return auditColors.added_prioritized; case 'prioritized': return auditColors.prioritized; + case 'added_deprioritized': + return auditColors.added_prioritized; + case 'deprioritized': + return auditColors.prioritized; case 'selected': return colors.marginal[levelIndex] || colors.marginal[defaultMempoolFeeColors.length - 1]; case 'accelerated': diff --git a/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.html b/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.html index bfb4cd206..f8fb3c89d 100644 --- a/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.html +++ b/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -40,7 +40,7 @@ Fee - {{ fee | number }} sat   + {{ fee | number }} sats   Fee rate @@ -51,7 +51,7 @@ Effective fee rate Accelerated fee rate - + @@ -75,6 +75,15 @@ Recently CPFP'd Added Prioritized + + Added + Prioritized + + Deprioritized + + Added + Deprioritized + Marginal fee rate Conflict Accelerated diff --git a/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.scss b/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.scss index 28708506b..0b2c05948 100644 --- a/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.scss +++ b/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.scss @@ -27,6 +27,9 @@ th, td { width: 70%; text-align: end; } + &.oobFees { + color: #905cf4; + } } .badge.badge-accelerated { diff --git a/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.ts b/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.ts index 0a606983e..ffff1b5ed 100644 --- a/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.ts +++ b/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.ts @@ -1,9 +1,9 @@ import { Component, ElementRef, ViewChild, Input, OnChanges, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core'; -import { Position } from '../../components/block-overview-graph/sprite-types.js'; -import { Price } from '../../services/price.service'; -import { TransactionStripped } from '../../interfaces/node-api.interface.js'; -import { Filter, FilterMode, TransactionFlags, toFilters } from '../../shared/filters.utils'; -import { Block } from '../../interfaces/electrs.interface.js'; +import { Position } from '@components/block-overview-graph/sprite-types.js'; +import { Price } from '@app/services/price.service'; +import { TransactionStripped } from '@interfaces/node-api.interface.js'; +import { Filter, FilterMode, TransactionFlags, toFilters } from '@app/shared/filters.utils'; +import { Block } from '@interfaces/electrs.interface.js'; @Component({ selector: 'app-block-overview-tooltip', diff --git a/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.ts b/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.ts index d0c154420..15dafb151 100644 --- a/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.ts +++ b/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.ts @@ -1,18 +1,18 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { download, formatterXAxis } from '../../shared/graphs.utils'; -import { MiningService } from '../../services/mining.service'; -import { StorageService } from '../../services/storage.service'; +import { download, formatterXAxis } from '@app/shared/graphs.utils'; +import { MiningService } from '@app/services/mining.service'; +import { StorageService } from '@app/services/storage.service'; import { ActivatedRoute } from '@angular/router'; -import { FiatShortenerPipe } from '../../shared/pipes/fiat-shortener.pipe'; -import { FiatCurrencyPipe } from '../../shared/pipes/fiat-currency.pipe'; -import { StateService } from '../../services/state.service'; +import { FiatShortenerPipe } from '@app/shared/pipes/fiat-shortener.pipe'; +import { FiatCurrencyPipe } from '@app/shared/pipes/fiat-currency.pipe'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-block-rewards-graph', @@ -23,7 +23,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts b/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts index bf591ad70..2cc0f0098 100644 --- a/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts +++ b/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts @@ -1,16 +1,16 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit, HostBinding } from '@angular/core'; -import { EChartsOption} from '../../graphs/echarts'; +import { EChartsOption} from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { StorageService } from '../../services/storage.service'; -import { MiningService } from '../../services/mining.service'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; import { ActivatedRoute } from '@angular/router'; -import { download, formatterXAxis } from '../../shared/graphs.utils'; -import { StateService } from '../../services/state.service'; +import { download, formatterXAxis } from '@app/shared/graphs.utils'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-block-sizes-weights-graph', @@ -21,7 +21,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/block-view/block-view.component.ts b/frontend/src/app/components/block-view/block-view.component.ts index 5c3b7719c..b5d5256ee 100644 --- a/frontend/src/app/components/block-view/block-view.component.ts +++ b/frontend/src/app/components/block-view/block-view.component.ts @@ -1,15 +1,15 @@ import { Component, OnInit, OnDestroy, ViewChild, HostListener } from '@angular/core'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, tap, catchError, shareReplay, filter } from 'rxjs/operators'; import { of, Subscription } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { BlockExtended, TransactionStripped } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { BlockOverviewGraphComponent } from '../block-overview-graph/block-overview-graph.component'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { BlockExtended, TransactionStripped } from '@interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; function bestFitResolution(min, max, n): number { const target = (min + max) / 2; diff --git a/frontend/src/app/components/block/block-preview.component.html b/frontend/src/app/components/block/block-preview.component.html index 56fa8886e..036ab8399 100644 --- a/frontend/src/app/components/block/block-preview.component.html +++ b/frontend/src/app/components/block/block-preview.component.html @@ -53,6 +53,13 @@ Miner + + @if (block.extras.pool.minerNames[1].length > 16) { + {{ block.extras.pool.minerNames[1].slice(0, 15) }}… + } @else { + {{ block.extras.pool.minerNames[1] }} + } + {{ block.extras.pool.name }} @@ -60,8 +67,15 @@ - {{ block?.extras.pool.name }} - + + @if (block.extras.pool.minerNames[1].length > 16) { + {{ block.extras.pool.minerNames[1].slice(0, 15) }}… + } @else { + {{ block.extras.pool.minerNames[1] }} + } + + {{ block.extras.pool.name }} + diff --git a/frontend/src/app/components/block/block-preview.component.ts b/frontend/src/app/components/block/block-preview.component.ts index 72da96818..b2fc3fb6f 100644 --- a/frontend/src/app/components/block/block-preview.component.ts +++ b/frontend/src/app/components/block/block-preview.component.ts @@ -1,16 +1,16 @@ import { Component, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, tap, throttleTime, catchError, shareReplay, startWith, pairwise, filter } from 'rxjs/operators'; import { of, Subscription, asyncScheduler, forkJoin } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { BlockExtended, TransactionStripped } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { BlockOverviewGraphComponent } from '../../components/block-overview-graph/block-overview-graph.component'; -import { ServicesApiServices } from '../../services/services-api.service'; +import { StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { BlockExtended, TransactionStripped } from '@interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; +import { ServicesApiServices } from '@app/services/services-api.service'; @Component({ selector: 'app-block-preview', @@ -137,7 +137,7 @@ export class BlockPreviewComponent implements OnInit, OnDestroy { }) ), this.stateService.env.ACCELERATOR === true && block.height > 819500 - ? this.servicesApiService.getAccelerationHistory$({ blockHeight: block.height }) + ? this.servicesApiService.getAllAccelerationHistory$({ blockHeight: block.height }) .pipe(catchError(() => { return of([]); })) diff --git a/frontend/src/app/components/block/block-transactions.component.ts b/frontend/src/app/components/block/block-transactions.component.ts index c0cda6c4f..170d8297d 100644 --- a/frontend/src/app/components/block/block-transactions.component.ts +++ b/frontend/src/app/components/block/block-transactions.component.ts @@ -1,10 +1,10 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; -import { StateService } from '../../services/state.service'; -import { Transaction, Vout } from '../../interfaces/electrs.interface'; +import { StateService } from '@app/services/state.service'; +import { Transaction, Vout } from '@interfaces/electrs.interface'; import { Observable, Subscription, catchError, combineLatest, map, of, startWith, switchMap, tap } from 'rxjs'; import { ActivatedRoute, Router } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; -import { PreloadService } from '../../services/preload.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; +import { PreloadService } from '@app/services/preload.service'; @Component({ selector: 'app-block-transactions', diff --git a/frontend/src/app/components/block/block.component.html b/frontend/src/app/components/block/block.component.html index 1dd9d8a8d..105cdf31a 100644 --- a/frontend/src/app/components/block/block.component.html +++ b/frontend/src/app/components/block/block.component.html @@ -66,10 +66,10 @@ [class.badge-success]="blockAudit?.matchRate >= 99" [class.badge-warning]="blockAudit?.matchRate >= 75 && blockAudit?.matchRate < 99" [class.badge-danger]="blockAudit?.matchRate < 75" - *ngIf="blockAudit?.matchRate != null; else nullHealth" + *ngIf="blockAudit?.matchRate != null && blockAudit?.id === block.id; else nullHealth" >{{ blockAudit?.matchRate }}% - + Unknown @@ -182,6 +182,13 @@ Miner + + @if (block.extras.pool.minerNames[1].length > 16) { + {{ block.extras.pool.minerNames[1].slice(0, 15) }}… + } @else { + {{ block.extras.pool.minerNames[1] }} + } + {{ block.extras.pool.name }} diff --git a/frontend/src/app/components/block/block.component.scss b/frontend/src/app/components/block/block.component.scss index fe5318375..945d61366 100644 --- a/frontend/src/app/components/block/block.component.scss +++ b/frontend/src/app/components/block/block.component.scss @@ -81,6 +81,19 @@ h1 { } } +.miner-name { + margin-right: 4px; + vertical-align: top; +} + +.pool-logo { + width: 25px; + height: 25px; + position: relative; + top: -1px; + margin-right: 2px; +} + .row { flex-direction: column; @media (min-width: 768px) { diff --git a/frontend/src/app/components/block/block.component.ts b/frontend/src/app/components/block/block.component.ts index 01702487f..dab3c00fa 100644 --- a/frontend/src/app/components/block/block.component.ts +++ b/frontend/src/app/components/block/block.component.ts @@ -1,22 +1,23 @@ import { Component, OnInit, OnDestroy, ViewChildren, QueryList, ChangeDetectorRef } from '@angular/core'; import { Location } from '@angular/common'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, tap, throttleTime, catchError, map, shareReplay, startWith, filter } from 'rxjs/operators'; import { Observable, of, Subscription, asyncScheduler, EMPTY, combineLatest, forkJoin } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { Acceleration, BlockAudit, BlockExtended, TransactionStripped } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { BlockOverviewGraphComponent } from '../../components/block-overview-graph/block-overview-graph.component'; -import { detectWebGL } from '../../shared/graphs.utils'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { PriceService, Price } from '../../services/price.service'; -import { CacheService } from '../../services/cache.service'; -import { ServicesApiServices } from '../../services/services-api.service'; -import { PreloadService } from '../../services/preload.service'; +import { StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { Acceleration, BlockAudit, BlockExtended, TransactionStripped } from '@interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; +import { detectWebGL } from '@app/shared/graphs.utils'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { PriceService, Price } from '@app/services/price.service'; +import { CacheService } from '@app/services/cache.service'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { PreloadService } from '@app/services/preload.service'; +import { identifyPrioritizedTransactions } from '@app/shared/transaction.utils'; @Component({ selector: 'app-block', @@ -318,7 +319,7 @@ export class BlockComponent implements OnInit, OnDestroy { this.accelerationsSubscription = this.block$.pipe( switchMap((block) => { return this.stateService.env.ACCELERATOR === true && block.height > 819500 - ? this.servicesApiService.getAccelerationHistory$({ blockHeight: block.height }) + ? this.servicesApiService.getAllAccelerationHistory$({ blockHeight: block.height }) .pipe(catchError(() => { return of([]); })) @@ -326,7 +327,7 @@ export class BlockComponent implements OnInit, OnDestroy { }) ).subscribe((accelerations) => { this.accelerations = accelerations; - if (accelerations.length) { + if (accelerations.length && this.strippedTransactions) { // Don't call setupBlockAudit if we don't have transactions yet; it will be called later in overviewSubscription this.setupBlockAudit(); } }); @@ -521,8 +522,10 @@ export class BlockComponent implements OnInit, OnDestroy { if (transactions && blockAudit) { const inTemplate = {}; const inBlock = {}; + const isUnseen = {}; const isAdded = {}; const isPrioritized = {}; + const isDeprioritized = {}; const isCensored = {}; const isMissing = {}; const isSelected = {}; @@ -534,6 +537,17 @@ export class BlockComponent implements OnInit, OnDestroy { this.numUnexpected = 0; if (blockAudit?.template) { + // augment with locally calculated *de*prioritized transactions if possible + const { prioritized, deprioritized } = identifyPrioritizedTransactions(transactions); + // but if the local calculation produces returns unexpected results, don't use it + let useLocalDeprioritized = deprioritized.length < (transactions.length * 0.1); + for (const tx of prioritized) { + if (!isPrioritized[tx] && !isAccelerated[tx]) { + useLocalDeprioritized = false; + break; + } + } + for (const tx of blockAudit.template) { inTemplate[tx.txid] = true; if (tx.acc) { @@ -543,12 +557,20 @@ export class BlockComponent implements OnInit, OnDestroy { for (const tx of transactions) { inBlock[tx.txid] = true; } + for (const txid of blockAudit.unseenTxs || []) { + isUnseen[txid] = true; + } for (const txid of blockAudit.addedTxs) { isAdded[txid] = true; } - for (const txid of blockAudit.prioritizedTxs || []) { + for (const txid of blockAudit.prioritizedTxs) { isPrioritized[txid] = true; } + if (useLocalDeprioritized) { + for (const txid of deprioritized || []) { + isDeprioritized[txid] = true; + } + } for (const txid of blockAudit.missingTxs) { isCensored[txid] = true; } @@ -592,18 +614,33 @@ export class BlockComponent implements OnInit, OnDestroy { tx.status = 'accelerated'; } } - for (const [index, tx] of transactions.entries()) { + let anySeen = false; + for (let index = transactions.length - 1; index >= 0; index--) { + const tx = transactions[index]; tx.context = 'actual'; if (index === 0) { tx.status = null; - } else if (isAdded[tx.txid]) { - tx.status = 'added'; } else if (isPrioritized[tx.txid]) { - tx.status = 'prioritized'; + if (isAdded[tx.txid] || (blockAudit.version > 0 && isUnseen[tx.txid])) { + tx.status = 'added_prioritized'; + } else { + tx.status = 'prioritized'; + } + } else if (isDeprioritized[tx.txid]) { + if (isAdded[tx.txid] || (blockAudit.version > 0 && isUnseen[tx.txid])) { + tx.status = 'added_deprioritized'; + } else { + tx.status = 'deprioritized'; + } + } else if (isAdded[tx.txid] && (blockAudit.version === 0 || isUnseen[tx.txid])) { + tx.status = 'added'; } else if (inTemplate[tx.txid]) { + anySeen = true; tx.status = 'found'; } else if (isRbf[tx.txid]) { tx.status = 'rbf'; + } else if (isUnseen[tx.txid] && anySeen) { + tx.status = 'added'; } else { tx.status = 'selected'; isSelected[tx.txid] = true; @@ -785,4 +822,4 @@ export class BlockComponent implements OnInit, OnDestroy { this.fees = blockReward; } } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/block/block.module.ts b/frontend/src/app/components/block/block.module.ts index 661e52dcf..206492e3f 100644 --- a/frontend/src/app/components/block/block.module.ts +++ b/frontend/src/app/components/block/block.module.ts @@ -1,9 +1,9 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { BlockComponent } from './block.component'; -import { BlockTransactionsComponent } from './block-transactions.component'; -import { SharedModule } from '../../shared/shared.module'; +import { BlockComponent } from '@components/block/block.component'; +import { BlockTransactionsComponent } from '@components/block/block-transactions.component'; +import { SharedModule } from '@app/shared/shared.module'; const routes: Routes = [ { diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html index a60e1db0a..a782e9588 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -60,9 +60,14 @@
diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss index b8de4f2ca..5c2a5ab5a 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss @@ -19,6 +19,38 @@ pointer-events: none; } +.on-pool-name-text { + display: inline-block; + padding-top: 2px; + font-weight: normal; +} + + +.on-pool { + align-items: center; + background-color: var(--bg); + display: inline-block; + margin-top: 4px; + padding: .25em .4em; + border-radius: .25rem; +} + +.on-pool-container { + align-items: center; + position: relative; + top: -8px; + display: flex; + flex-direction: column; +} + +.on-pool-container.selected { + top: 0px; +} + +.pool-container { + margin-top: 12px; +} + .mined-block { position: absolute; top: 0px; @@ -155,9 +187,16 @@ .badge { position: relative; - top: 15px; + top: 19px; z-index: 101; color: #FFF; + overflow: hidden; + text-overflow: ellipsis; + max-width: 145px; + + &.miner-name { + max-width: 125px; + } } .pool-logo { @@ -168,6 +207,10 @@ margin-right: 2px; } +.pool-logo.faded { + filter: grayscale(100%) brightness(1.5); +} + .animated { transition: all 0.15s ease-in-out; white-space: nowrap; diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts index 1a7598079..008ab1052 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts @@ -1,10 +1,10 @@ import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef, Input, OnChanges, SimpleChanges } from '@angular/core'; import { Observable, Subscription, delay, filter, tap } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { specialBlocks } from '../../app.constants'; -import { BlockExtended } from '../../interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { specialBlocks } from '@app/app.constants'; +import { BlockExtended } from '@interfaces/node-api.interface'; import { Location } from '@angular/common'; -import { CacheService } from '../../services/cache.service'; +import { CacheService } from '@app/services/cache.service'; interface BlockchainBlock extends BlockExtended { placeholder?: boolean; diff --git a/frontend/src/app/components/blockchain/blockchain.component.ts b/frontend/src/app/components/blockchain/blockchain.component.ts index d70e788a2..2e3224a9c 100644 --- a/frontend/src/app/components/blockchain/blockchain.component.ts +++ b/frontend/src/app/components/blockchain/blockchain.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, Input, Output, EventEmitter, ChangeDetectorRef, OnChanges, SimpleChanges } from '@angular/core'; import { firstValueFrom, Subscription } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { StorageService } from '../../services/storage.service'; +import { StateService } from '@app/services/state.service'; +import { StorageService } from '@app/services/storage.service'; @Component({ selector: 'app-blockchain', diff --git a/frontend/src/app/components/blocks-list/blocks-list.component.html b/frontend/src/app/components/blocks-list/blocks-list.component.html index d82472492..807d429bf 100644 --- a/frontend/src/app/components/blocks-list/blocks-list.component.html +++ b/frontend/src/app/components/blocks-list/blocks-list.component.html @@ -1,8 +1,11 @@
-

Blocks

-
+
+

Blocks

+ +
+
diff --git a/frontend/src/app/components/blocks-list/blocks-list.component.scss b/frontend/src/app/components/blocks-list/blocks-list.component.scss index 2315844ae..9e4465cf1 100644 --- a/frontend/src/app/components/blocks-list/blocks-list.component.scss +++ b/frontend/src/app/components/blocks-list/blocks-list.component.scss @@ -1,7 +1,9 @@ .spinner-border { height: 25px; width: 25px; - margin-top: 13px; + margin-top: -10px; + margin-left: -13px; + flex-shrink: 0; } .container-xl { diff --git a/frontend/src/app/components/blocks-list/blocks-list.component.ts b/frontend/src/app/components/blocks-list/blocks-list.component.ts index 5270ee7be..9c04058e9 100644 --- a/frontend/src/app/components/blocks-list/blocks-list.component.ts +++ b/frontend/src/app/components/blocks-list/blocks-list.component.ts @@ -2,13 +2,14 @@ import { Component, OnInit, ChangeDetectionStrategy, Input, ChangeDetectorRef, I import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject, combineLatest, Observable, timer, of, Subscription } from 'rxjs'; import { debounceTime, delayWhen, filter, map, retryWhen, scan, skip, switchMap, tap, throttleTime } from 'rxjs/operators'; -import { BlockExtended } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; +import { BlockExtended } from '@interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; @Component({ selector: 'app-blocks-list', @@ -49,6 +50,7 @@ export class BlocksList implements OnInit { private ogService: OpenGraphService, private route: ActivatedRoute, private router: Router, + private relativeUrlPipe: RelativeUrlPipe, @Inject(LOCALE_ID) private locale: string, ) { this.isMempoolModule = this.stateService.env.BASE_MODULE === 'mempool'; @@ -182,7 +184,7 @@ export class BlocksList implements OnInit { } pageChange(page: number): void { - this.router.navigate(['blocks', page]); + this.router.navigate([this.relativeUrlPipe.transform('/blocks/'), page]); } trackByBlock(index: number, block: BlockExtended): number { diff --git a/frontend/src/app/components/calculator/calculator.component.html b/frontend/src/app/components/calculator/calculator.component.html index e4ade67d2..e205479ee 100644 --- a/frontend/src/app/components/calculator/calculator.component.html +++ b/frontend/src/app/components/calculator/calculator.component.html @@ -12,7 +12,7 @@
{{ currency$ | async }}
- +
@@ -20,7 +20,7 @@
BTC
- +
@@ -28,7 +28,7 @@
sats
- +
diff --git a/frontend/src/app/components/calculator/calculator.component.ts b/frontend/src/app/components/calculator/calculator.component.ts index a6f10c049..c276db323 100644 --- a/frontend/src/app/components/calculator/calculator.component.ts +++ b/frontend/src/app/components/calculator/calculator.component.ts @@ -2,8 +2,8 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { combineLatest, Observable } from 'rxjs'; import { map, switchMap } from 'rxjs/operators'; -import { StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-calculator', diff --git a/frontend/src/app/components/clipboard/clipboard.component.html b/frontend/src/app/components/clipboard/clipboard.component.html index d23ccdf8c..c3a18d90b 100644 --- a/frontend/src/app/components/clipboard/clipboard.component.html +++ b/frontend/src/app/components/clipboard/clipboard.component.html @@ -1,15 +1,17 @@ - - - + {{ copiedMessage }} diff --git a/frontend/src/app/components/clipboard/clipboard.component.scss b/frontend/src/app/components/clipboard/clipboard.component.scss index 49294e548..6ae620ae7 100644 --- a/frontend/src/app/components/clipboard/clipboard.component.scss +++ b/frontend/src/app/components/clipboard/clipboard.component.scss @@ -7,7 +7,19 @@ padding-left: 0.4rem; } -img { - position: relative; - left: -3px; -} \ No newline at end of file +.copied-message { + background: color-mix(in srgb, var(--active-bg) 95%, transparent); + color: var(--fg); + font-family: sans-serif; + font-size: .8rem; + font-weight: 400; + text-decoration: none; + text-align: left; + padding: .6em .75rem; + border-radius: 4px; + position: absolute; + white-space: nowrap; + box-shadow: 0 .5rem 1rem -.5rem #000; + z-index: 1000; + opacity: .9; +} diff --git a/frontend/src/app/components/clipboard/clipboard.component.ts b/frontend/src/app/components/clipboard/clipboard.component.ts index 6e577d8b3..31f882d12 100644 --- a/frontend/src/app/components/clipboard/clipboard.component.ts +++ b/frontend/src/app/components/clipboard/clipboard.component.ts @@ -1,6 +1,4 @@ -import { Component, ViewChild, ElementRef, AfterViewInit, Input, ChangeDetectionStrategy } from '@angular/core'; -import * as ClipboardJS from 'clipboard'; -import * as tlite from 'tlite'; +import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core'; @Component({ selector: 'app-clipboard', @@ -8,15 +6,14 @@ import * as tlite from 'tlite'; styleUrls: ['./clipboard.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, }) -export class ClipboardComponent implements AfterViewInit { - @ViewChild('btn') btn: ElementRef; - @ViewChild('buttonWrapper') buttonWrapper: ElementRef; +export class ClipboardComponent { @Input() button = false; @Input() class = 'btn btn-secondary ml-1'; @Input() size: 'small' | 'normal' | 'large' = 'normal'; @Input() text: string; @Input() leftPadding = true; copiedMessage: string = $localize`:@@clipboard.copied-message:Copied!`; + showMessage = false; widths = { small: '10', @@ -24,22 +21,40 @@ export class ClipboardComponent implements AfterViewInit { large: '18', }; - clipboard: any; + constructor( + private cd: ChangeDetectorRef, + ) { } - constructor() { } - - ngAfterViewInit() { - this.clipboard = new ClipboardJS(this.btn.nativeElement); - this.clipboard.on('success', () => { - tlite.show(this.buttonWrapper.nativeElement); - setTimeout(() => { - tlite.hide(this.buttonWrapper.nativeElement); - }, 1000); - }); + async copyText() { + if (this.text && !this.showMessage) { + try { + await this.copyToClipboard(this.text); + this.showMessage = true; + this.cd.markForCheck(); + setTimeout(() => { + this.showMessage = false; + this.cd.markForCheck(); + }, 1000); + } catch (error) { + console.error('Clipboard copy failed:', error); + } + } } - onDestroy() { - this.clipboard.destroy(); + async copyToClipboard(text: string) { + if (navigator.clipboard) { + await navigator.clipboard.writeText(text); + } else { + // Use the 'out of viewport hidden text area' trick on non-secure contexts + const textarea = document.createElement('textarea'); + textarea.value = this.text; + textarea.style.opacity = '0'; + textarea.setAttribute('readonly', 'true'); // Don't trigger keyboard on mobile + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } } } diff --git a/frontend/src/app/components/clock-face/clock-face.component.ts b/frontend/src/app/components/clock-face/clock-face.component.ts index eec0fa98c..a13594597 100644 --- a/frontend/src/app/components/clock-face/clock-face.component.ts +++ b/frontend/src/app/components/clock-face/clock-face.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core'; import { Subscription, tap, timer } from 'rxjs'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-clock-face', diff --git a/frontend/src/app/components/clock/clock.component.ts b/frontend/src/app/components/clock/clock.component.ts index 4a9b19e78..90b3d5d26 100644 --- a/frontend/src/app/components/clock/clock.component.ts +++ b/frontend/src/app/components/clock/clock.component.ts @@ -1,11 +1,11 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Input, OnInit } from '@angular/core'; import { Observable, Subscription, of, switchMap, tap } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { BlockExtended } from '../../interfaces/node-api.interface'; -import { WebsocketService } from '../../services/websocket.service'; -import { MempoolInfo, Recommendedfees } from '../../interfaces/websocket.interface'; +import { StateService } from '@app/services/state.service'; +import { BlockExtended } from '@interfaces/node-api.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { MempoolInfo, Recommendedfees } from '@interfaces/websocket.interface'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; @Component({ selector: 'app-clock', diff --git a/frontend/src/app/components/clockchain/clockchain.component.ts b/frontend/src/app/components/clockchain/clockchain.component.ts index c17b1e0ae..41faa897b 100644 --- a/frontend/src/app/components/clockchain/clockchain.component.ts +++ b/frontend/src/app/components/clockchain/clockchain.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, Input, OnChanges, ChangeDetectorRef } from '@angular/core'; import { firstValueFrom, Subscription } from 'rxjs'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-clockchain', diff --git a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html index 65f0dc0ab..b6e374587 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html @@ -238,7 +238,7 @@   - +
@@ -267,9 +267,11 @@
@@ -313,4 +315,4 @@ - \ No newline at end of file + diff --git a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts index 622e6cf3a..36af77d6d 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts @@ -1,16 +1,16 @@ import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; import { combineLatest, merge, Observable, of, Subject, Subscription } from 'rxjs'; import { catchError, filter, map, scan, share, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'; -import { BlockExtended, OptimizedMempoolStats, TransactionStripped } from '../../interfaces/node-api.interface'; -import { MempoolInfo, ReplacementInfo } from '../../interfaces/websocket.interface'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { SeoService } from '../../services/seo.service'; -import { ActiveFilter, FilterMode, GradientMode, toFlags } from '../../shared/filters.utils'; -import { detectWebGL } from '../../shared/graphs.utils'; -import { Address, AddressTxSummary } from '../../interfaces/electrs.interface'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { BlockExtended, OptimizedMempoolStats, TransactionStripped } from '@interfaces/node-api.interface'; +import { MempoolInfo, ReplacementInfo } from '@interfaces/websocket.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { SeoService } from '@app/services/seo.service'; +import { ActiveFilter, FilterMode, GradientMode, toFlags } from '@app/shared/filters.utils'; +import { detectWebGL } from '@app/shared/graphs.utils'; +import { Address, AddressTxSummary } from '@interfaces/electrs.interface'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; interface MempoolBlocksData { blocks: number; @@ -73,7 +73,7 @@ export class CustomDashboardComponent implements OnInit, OnDestroy, AfterViewIni { index: 0, name: $localize`:@@dfc3c34e182ea73c5d784ff7c8135f087992dac1:All`, mode: 'and', filters: [], gradient: 'age' }, { index: 1, name: $localize`Consolidation`, mode: 'and', filters: ['consolidation'], gradient: 'fee' }, { index: 2, name: $localize`Coinjoin`, mode: 'and', filters: ['coinjoin'], gradient: 'fee' }, - { index: 3, name: $localize`Data`, mode: 'or', filters: ['inscription', 'fake_pubkey', 'op_return'], gradient: 'fee' }, + { index: 3, name: $localize`Data`, mode: 'or', filters: ['inscription', 'fake_pubkey', 'fake_scripthash', 'op_return'], gradient: 'fee' }, ]; goggleFlags = 0n; goggleMode: FilterMode = 'and'; @@ -370,23 +370,47 @@ export class CustomDashboardComponent implements OnInit, OnDestroy, AfterViewIni const walletName = this.stateService.env.customize.dashboard.widgets.find(w => w.props?.wallet).props.wallet; this.websocketService.startTrackingWallet(walletName); - this.walletSummary$ = this.apiService.getWallet$(walletName).pipe( + this.walletSummary$ = this.apiService.getWallet$(walletName).pipe( catchError(e => { - return of(null); + return of({}); }), - map((walletTransactions) => { - const transactions = Object.values(walletTransactions).flatMap(wallet => wallet.transactions); - return this.deduplicateWalletTransactions(transactions); - }), - switchMap(initial => this.stateService.walletTransactions$.pipe( - startWith(null), - scan((summary, walletTransactions) => { - if (walletTransactions) { - const transactions: AddressTxSummary[] = [...summary, ...Object.values(walletTransactions).flat()]; - return this.deduplicateWalletTransactions(transactions); + switchMap(wallet => this.stateService.walletTransactions$.pipe( + startWith([]), + scan((summaries, newTransactions) => { + const newSummaries: AddressTxSummary[] = []; + for (const tx of newTransactions) { + const funded: Record = {}; + const spent: Record = {}; + const fundedCount: Record = {}; + const spentCount: Record = {}; + for (const vin of tx.vin) { + const address = vin.prevout?.scriptpubkey_address; + if (address && wallet[address]) { + spent[address] = (spent[address] ?? 0) + (vin.prevout?.value ?? 0); + spentCount[address] = (spentCount[address] ?? 0) + 1; + } + } + for (const vout of tx.vout) { + const address = vout.scriptpubkey_address; + if (address && wallet[address]) { + funded[address] = (funded[address] ?? 0) + (vout.value ?? 0); + fundedCount[address] = (fundedCount[address] ?? 0) + 1; + } + } + for (const address of Object.keys({ ...funded, ...spent })) { + // add tx to summary + const txSummary: AddressTxSummary = { + txid: tx.txid, + value: (funded[address] ?? 0) - (spent[address] ?? 0), + height: tx.status.block_height, + time: tx.status.block_time, + }; + wallet[address].transactions?.push(txSummary); + newSummaries.push(txSummary); + } } - return summary; - }, initial) + return this.deduplicateWalletTransactions([...summaries, ...newSummaries]); + }, this.deduplicateWalletTransactions(Object.values(wallet).flatMap(address => address.transactions))) )), share(), ); diff --git a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts index 7db1367ea..1257a233a 100644 --- a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts +++ b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts @@ -1,10 +1,10 @@ import { Component, Inject, LOCALE_ID, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; +import { ApiService } from '@app/services/api.service'; import { formatNumber } from '@angular/common'; -import { selectPowerOfTen } from '../../bitcoin.utils'; -import { StateService } from '../../services/state.service'; +import { selectPowerOfTen } from '@app/bitcoin.utils'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-difficulty-adjustments-table', @@ -15,7 +15,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], }) diff --git a/frontend/src/app/components/difficulty-mining/difficulty-mining.component.ts b/frontend/src/app/components/difficulty-mining/difficulty-mining.component.ts index 90b41d749..84912c8dc 100644 --- a/frontend/src/app/components/difficulty-mining/difficulty-mining.component.ts +++ b/frontend/src/app/components/difficulty-mining/difficulty-mining.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { combineLatest, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; interface EpochProgress { base: string; @@ -77,7 +77,7 @@ export class DifficultyMiningComponent implements OnInit { base: `${da.progressPercent.toFixed(2)}%`, change: da.difficultyChange, progress: da.progressPercent, - remainingBlocks: da.remainingBlocks - 1, + remainingBlocks: da.remainingBlocks, colorAdjustments, colorPreviousAdjustments, newDifficultyHeight: da.nextRetargetHeight, diff --git a/frontend/src/app/components/difficulty/difficulty.component.ts b/frontend/src/app/components/difficulty/difficulty.component.ts index 579b49fc3..3737754df 100644 --- a/frontend/src/app/components/difficulty/difficulty.component.ts +++ b/frontend/src/app/components/difficulty/difficulty.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, ElementRef, ViewChild, Inject, Input, LOCALE_ID, OnInit } from '@angular/core'; import { combineLatest, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { StateService } from '../..//services/state.service'; +import { StateService } from '@app/services/state.service'; interface EpochProgress { base: string; @@ -153,8 +153,8 @@ export class DifficultyComponent implements OnInit { base: `${da.progressPercent.toFixed(2)}%`, change: da.difficultyChange, progress: da.progressPercent, - minedBlocks: this.currentIndex + 1, - remainingBlocks: da.remainingBlocks - 1, + minedBlocks: this.currentIndex, + remainingBlocks: da.remainingBlocks, expectedBlocks: Math.floor(da.expectedBlocks), colorAdjustments, colorPreviousAdjustments, @@ -247,4 +247,4 @@ function getNextBlockSubsidy(height: number): number { // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years. subsidy >>= BigInt(halvings); return Number(subsidy); -} \ No newline at end of file +} diff --git a/frontend/src/app/components/eight-blocks/eight-blocks.component.ts b/frontend/src/app/components/eight-blocks/eight-blocks.component.ts index 81dcc4c5b..8ca8437ac 100644 --- a/frontend/src/app/components/eight-blocks/eight-blocks.component.ts +++ b/frontend/src/app/components/eight-blocks/eight-blocks.component.ts @@ -2,15 +2,15 @@ import { Component, OnInit, OnDestroy, ViewChildren, QueryList } from '@angular/ import { ActivatedRoute, Router } from '@angular/router'; import { catchError, startWith } from 'rxjs/operators'; import { Subject, Subscription, of } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { BlockExtended, TransactionStripped } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { BlockOverviewGraphComponent } from '../block-overview-graph/block-overview-graph.component'; -import { detectWebGL } from '../../shared/graphs.utils'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { BlockExtended, TransactionStripped } from '@interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; +import { detectWebGL } from '@app/shared/graphs.utils'; import { animate, style, transition, trigger } from '@angular/animations'; -import { BytesPipe } from '../../shared/pipes/bytes-pipe/bytes.pipe'; +import { BytesPipe } from '@app/shared/pipes/bytes-pipe/bytes.pipe'; function bestFitResolution(min, max, n): number { const target = (min + max) / 2; diff --git a/frontend/src/app/components/faucet/faucet.component.html b/frontend/src/app/components/faucet/faucet.component.html index 89e6bb8a8..3165ae9a7 100644 --- a/frontend/src/app/components/faucet/faucet.component.html +++ b/frontend/src/app/components/faucet/faucet.component.html @@ -5,7 +5,7 @@
- + @if (txid) {
@@ -27,6 +27,14 @@
} + @else if (user && user.status === 'pending' && !user.email && user.snsId) { +
+ + + Please verify your account by providing a valid email address. To mitigate spam, we delete unverified accounts at regular intervals. + +
+ } @else if (error === 'not_available') {
@@ -36,6 +44,13 @@
} + @else if (error === 'account_limited') { +
+
+ Your Twitter account does not allow you to access the faucet +
+
+ } @else if (error) { @@ -81,7 +96,7 @@ } - @if (status?.address) { + @if (status?.address) {
If you no longer need your testnet4 coins, please consider sending them back to replenish the faucet.
} diff --git a/frontend/src/app/components/faucet/faucet.component.ts b/frontend/src/app/components/faucet/faucet.component.ts index 891b6310d..33d9a849e 100644 --- a/frontend/src/app/components/faucet/faucet.component.ts +++ b/frontend/src/app/components/faucet/faucet.component.ts @@ -1,13 +1,12 @@ -import { Component, OnDestroy, OnInit, ChangeDetectorRef } from "@angular/core"; -import { FormBuilder, FormGroup, Validators, ValidatorFn, AbstractControl, ValidationErrors } from "@angular/forms"; -import { Subscription } from "rxjs"; -import { StorageService } from "../../services/storage.service"; -import { ServicesApiServices } from "../../services/services-api.service"; -import { getRegex } from "../../shared/regex.utils"; -import { StateService } from "../../services/state.service"; -import { WebsocketService } from "../../services/websocket.service"; -import { AudioService } from "../../services/audio.service"; -import { HttpErrorResponse } from "@angular/common/http"; +import { Component, OnDestroy, OnInit, ChangeDetectorRef } from '@angular/core'; +import { FormBuilder, FormGroup, Validators, ValidatorFn, AbstractControl, ValidationErrors } from '@angular/forms'; +import { Subscription } from 'rxjs'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { getRegex } from '@app/shared/regex.utils'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { AudioService } from '@app/services/audio.service'; +import { HttpErrorResponse } from '@angular/common/http'; @Component({ selector: 'app-faucet', @@ -19,7 +18,7 @@ export class FaucetComponent implements OnInit, OnDestroy { error: string = ''; user: any = undefined; txid: string = ''; - + faucetStatusSubscription: Subscription; status: { min: number; // minimum amount to request at once (in sats) @@ -34,7 +33,6 @@ export class FaucetComponent implements OnInit, OnDestroy { constructor( private cd: ChangeDetectorRef, - private storageService: StorageService, private servicesApiService: ServicesApiServices, private formBuilder: FormBuilder, private stateService: StateService, @@ -56,14 +54,17 @@ export class FaucetComponent implements OnInit, OnDestroy { } ngOnInit() { - this.user = this.storageService.getAuth()?.user ?? null; - if (!this.user) { - this.loading = false; - return; - } - - // Setup form - this.updateFaucetStatus(); + this.servicesApiService.userSubject$.subscribe(user => { + this.user = user; + if (!user) { + this.loading = false; + this.cd.markForCheck(); + return; + } + // Setup form + this.updateFaucetStatus(); + this.cd.markForCheck(); + }); // Track transaction this.websocketService.want(['blocks', 'mempool-blocks']); @@ -145,9 +146,6 @@ export class FaucetComponent implements OnInit, OnDestroy { 'address': ['', [Validators.required, Validators.pattern(getRegex('address', 'testnet4')), this.getNotFaucetAddressValidator(faucetAddress)]], 'satoshis': [min, [Validators.required, Validators.min(min), Validators.max(max)]] }); - - this.loading = false; - this.cd.markForCheck(); } updateForm(min, max, faucetAddress: string): void { @@ -160,6 +158,8 @@ export class FaucetComponent implements OnInit, OnDestroy { this.faucetForm.get('satoshis').updateValueAndValidity(); this.faucetForm.get('satoshis').markAsDirty(); } + this.loading = false; + this.cd.markForCheck(); } setAmount(value: number): void { diff --git a/frontend/src/app/components/fee-distribution-graph/fee-distribution-graph.component.ts b/frontend/src/app/components/fee-distribution-graph/fee-distribution-graph.component.ts index c26aae31a..aa57f92d9 100644 --- a/frontend/src/app/components/fee-distribution-graph/fee-distribution-graph.component.ts +++ b/frontend/src/app/components/fee-distribution-graph/fee-distribution-graph.component.ts @@ -1,9 +1,9 @@ import { HostListener, OnChanges, OnDestroy } from '@angular/core'; import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core'; -import { TransactionStripped } from '../../interfaces/node-api.interface'; -import { StateService } from '../../services/state.service'; -import { VbytesPipe } from '../../shared/pipes/bytes-pipe/vbytes.pipe'; -import { selectPowerOfTen } from '../../bitcoin.utils'; +import { TransactionStripped } from '@interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { VbytesPipe } from '@app/shared/pipes/bytes-pipe/vbytes.pipe'; +import { selectPowerOfTen } from '@app/bitcoin.utils'; import { Subscription } from 'rxjs'; @Component({ diff --git a/frontend/src/app/components/fees-box/fees-box.component.ts b/frontend/src/app/components/fees-box/fees-box.component.ts index 78fd102ca..b8689bd3c 100644 --- a/frontend/src/app/components/fees-box/fees-box.component.ts +++ b/frontend/src/app/components/fees-box/fees-box.component.ts @@ -1,10 +1,10 @@ import { Component, OnInit, ChangeDetectionStrategy, OnDestroy, ChangeDetectorRef } from '@angular/core'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; import { Observable, combineLatest, Subscription } from 'rxjs'; -import { Recommendedfees } from '../../interfaces/websocket.interface'; -import { feeLevels } from '../../app.constants'; +import { Recommendedfees } from '@interfaces/websocket.interface'; +import { feeLevels } from '@app/app.constants'; import { map, startWith, tap } from 'rxjs/operators'; -import { ThemeService } from '../../services/theme.service'; +import { ThemeService } from '@app/services/theme.service'; @Component({ selector: 'app-fees-box', diff --git a/frontend/src/app/components/fiat-selector/fiat-selector.component.ts b/frontend/src/app/components/fiat-selector/fiat-selector.component.ts index 732c6e862..a9d4b06a3 100644 --- a/frontend/src/app/components/fiat-selector/fiat-selector.component.ts +++ b/frontend/src/app/components/fiat-selector/fiat-selector.component.ts @@ -1,8 +1,8 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { StorageService } from '../../services/storage.service'; -import { fiatCurrencies } from '../../app.constants'; -import { StateService } from '../../services/state.service'; +import { StorageService } from '@app/services/storage.service'; +import { fiatCurrencies } from '@app/app.constants'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-fiat-selector', diff --git a/frontend/src/app/components/footer/footer.component.ts b/frontend/src/app/components/footer/footer.component.ts index a78d1e195..4001a3875 100644 --- a/frontend/src/app/components/footer/footer.component.ts +++ b/frontend/src/app/components/footer/footer.component.ts @@ -1,8 +1,8 @@ import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; import { Observable, combineLatest } from 'rxjs'; import { map } from 'rxjs/operators'; -import { MempoolInfo } from '../../interfaces/websocket.interface'; +import { MempoolInfo } from '@interfaces/websocket.interface'; interface MempoolBlocksData { blocks: number; diff --git a/frontend/src/app/components/graphs/graphs.component.ts b/frontend/src/app/components/graphs/graphs.component.ts index d6dcddb2e..c8c620f54 100644 --- a/frontend/src/app/components/graphs/graphs.component.ts +++ b/frontend/src/app/components/graphs/graphs.component.ts @@ -1,6 +1,8 @@ import { Component, OnInit } from '@angular/core'; -import { StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { Router, ActivatedRoute } from '@angular/router'; +import { handleDemoRedirect } from '../../shared/common.utils'; @Component({ selector: 'app-graphs', @@ -13,7 +15,9 @@ export class GraphsComponent implements OnInit { constructor( public stateService: StateService, - private websocketService: WebsocketService + private websocketService: WebsocketService, + private router: Router, + private route: ActivatedRoute ) { } ngOnInit(): void { @@ -22,5 +26,7 @@ export class GraphsComponent implements OnInit { if (this.stateService.env.ACCELERATOR === true && (this.stateService.env.MINING_DASHBOARD === true || this.stateService.env.LIGHTNING === true)) { this.flexWrap = true; } + + handleDemoRedirect(this.route, this.router); } } diff --git a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html index b50389ce8..b8a720743 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html @@ -5,7 +5,7 @@
-
Hashrate
+
Hashrate (1w)

{{ hashrates.currentHashrate | amountShortener: 1 : 'H/s' }}

diff --git a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts index 8aaa983fa..d53916b97 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts @@ -1,18 +1,18 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit, HostBinding } from '@angular/core'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { combineLatest, fromEvent, merge, Observable, of } from 'rxjs'; import { map, mergeMap, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { selectPowerOfTen } from '../../bitcoin.utils'; -import { StorageService } from '../../services/storage.service'; -import { MiningService } from '../../services/mining.service'; -import { download } from '../../shared/graphs.utils'; +import { selectPowerOfTen } from '@app/bitcoin.utils'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; +import { download } from '@app/shared/graphs.utils'; import { ActivatedRoute } from '@angular/router'; -import { StateService } from '../../services/state.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; +import { StateService } from '@app/services/state.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; @Component({ selector: 'app-hashrate-chart', @@ -23,7 +23,7 @@ import { seoDescriptionNetwork } from '../../shared/common.utils'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.scss b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.scss index fe38ce89b..87ee1b45d 100644 --- a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.scss +++ b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.scss @@ -59,7 +59,7 @@ position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } .loadingGraphs.widget { top: 75%; diff --git a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts index 5ac2cc10d..f93cf460d 100644 --- a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts +++ b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -1,16 +1,16 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, OnInit, HostBinding } from '@angular/core'; -import { EChartsOption } from '../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { delay, map, retryWhen, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { chartColors, poolsColor } from '../../app.constants'; -import { StorageService } from '../../services/storage.service'; -import { MiningService } from '../../services/mining.service'; -import { download } from '../../shared/graphs.utils'; +import { chartColors, poolsColor } from '@app/app.constants'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; +import { download } from '@app/shared/graphs.utils'; import { ActivatedRoute } from '@angular/router'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; interface Hashrate { timestamp: number; @@ -28,7 +28,7 @@ interface Hashrate { position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts b/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts index d3d7d8237..754d5bdde 100644 --- a/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts +++ b/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts @@ -1,10 +1,10 @@ import { Component, Input, Inject, LOCALE_ID, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core'; -import { EChartsOption } from '../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { OnChanges } from '@angular/core'; -import { StorageService } from '../../services/storage.service'; -import { download, formatterXAxis, formatterXAxisLabel } from '../../shared/graphs.utils'; +import { StorageService } from '@app/services/storage.service'; +import { download, formatterXAxis, formatterXAxisLabel } from '@app/shared/graphs.utils'; import { formatNumber } from '@angular/common'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; import { Subscription } from 'rxjs'; const OUTLIERS_MEDIAN_MULTIPLIER = 4; @@ -17,7 +17,7 @@ const OUTLIERS_MEDIAN_MULTIPLIER = 4; position: absolute; top: 50%; left: calc(50% - 16px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/language-selector/language-selector.component.ts b/frontend/src/app/components/language-selector/language-selector.component.ts index 2b9e559f0..b6df5599a 100644 --- a/frontend/src/app/components/language-selector/language-selector.component.ts +++ b/frontend/src/app/components/language-selector/language-selector.component.ts @@ -1,8 +1,8 @@ import { DOCUMENT } from '@angular/common'; import { ChangeDetectionStrategy, Component, Inject, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { languages } from '../../app.constants'; -import { LanguageService } from '../../services/language.service'; +import { languages } from '@app/app.constants'; +import { LanguageService } from '@app/services/language.service'; @Component({ selector: 'app-language-selector', diff --git a/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.ts b/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.ts index aca469ff8..063280898 100644 --- a/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.ts +++ b/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.ts @@ -1,7 +1,7 @@ import { Component, Inject, LOCALE_ID, ChangeDetectionStrategy, Input, OnChanges, OnInit } from '@angular/core'; import { formatDate, formatNumber } from '@angular/common'; -import { EChartsOption } from '../../graphs/echarts'; -import { StateService } from '../../services/state.service'; +import { EChartsOption } from '@app/graphs/echarts'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-lbtc-pegs-graph', @@ -11,7 +11,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 16px); - z-index: 100; + z-index: 99; } `], templateUrl: './lbtc-pegs-graph.component.html', diff --git a/frontend/src/app/components/liquid-master-page/liquid-master-page.component.html b/frontend/src/app/components/liquid-master-page/liquid-master-page.component.html index b2dd0344b..7e39d9341 100644 --- a/frontend/src/app/components/liquid-master-page/liquid-master-page.component.html +++ b/frontend/src/app/components/liquid-master-page/liquid-master-page.component.html @@ -52,7 +52,7 @@ Mainnet Signet Testnet3 - Testnet4 beta + Testnet4 Liquid Liquid Testnet diff --git a/frontend/src/app/components/liquid-master-page/liquid-master-page.component.ts b/frontend/src/app/components/liquid-master-page/liquid-master-page.component.ts index 07929d894..be4815f28 100644 --- a/frontend/src/app/components/liquid-master-page/liquid-master-page.component.ts +++ b/frontend/src/app/components/liquid-master-page/liquid-master-page.component.ts @@ -1,9 +1,9 @@ import { Component, OnInit } from '@angular/core'; -import { Env, StateService } from '../../services/state.service'; +import { Env, StateService } from '@app/services/state.service'; import { merge, Observable, of} from 'rxjs'; -import { LanguageService } from '../../services/language.service'; -import { EnterpriseService } from '../../services/enterprise.service'; -import { NavigationService } from '../../services/navigation.service'; +import { LanguageService } from '@app/services/language.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; +import { NavigationService } from '@app/services/navigation.service'; @Component({ selector: 'app-liquid-master-page', diff --git a/frontend/src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.ts b/frontend/src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.ts index 90a737275..e9de3cce3 100644 --- a/frontend/src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable, map, of } from 'rxjs'; -import { FederationUtxo } from '../../../interfaces/node-api.interface'; +import { FederationUtxo } from '@interfaces/node-api.interface'; @Component({ selector: 'app-expired-utxos-stats', diff --git a/frontend/src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.ts b/frontend/src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.ts index caeac1987..e098dfc34 100644 --- a/frontend/src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.ts @@ -1,10 +1,10 @@ import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core'; import { Observable, Subject, combineLatest, of, timer } from 'rxjs'; import { delayWhen, filter, map, share, shareReplay, switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators'; -import { ApiService } from '../../../services/api.service'; -import { Env, StateService } from '../../../services/state.service'; -import { AuditStatus, CurrentPegs, FederationAddress } from '../../../interfaces/node-api.interface'; -import { WebsocketService } from '../../../services/websocket.service'; +import { ApiService } from '@app/services/api.service'; +import { Env, StateService } from '@app/services/state.service'; +import { AuditStatus, CurrentPegs, FederationAddress } from '@interfaces/node-api.interface'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-federation-addresses-list', diff --git a/frontend/src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.ts b/frontend/src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.ts index e41c49643..44d0e44f8 100644 --- a/frontend/src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.ts @@ -2,10 +2,10 @@ import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject, Observable, Subject, combineLatest, of, timer } from 'rxjs'; import { delayWhen, filter, map, share, shareReplay, switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators'; -import { ApiService } from '../../../services/api.service'; -import { Env, StateService } from '../../../services/state.service'; -import { AuditStatus, CurrentPegs, FederationUtxo } from '../../../interfaces/node-api.interface'; -import { WebsocketService } from '../../../services/websocket.service'; +import { ApiService } from '@app/services/api.service'; +import { Env, StateService } from '@app/services/state.service'; +import { AuditStatus, CurrentPegs, FederationUtxo } from '@interfaces/node-api.interface'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-federation-utxos-list', diff --git a/frontend/src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.ts b/frontend/src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.ts index 51a4cedc2..1c87a8783 100644 --- a/frontend/src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { SeoService } from '../../../services/seo.service'; +import { SeoService } from '@app/services/seo.service'; @Component({ selector: 'app-federation-wallet', diff --git a/frontend/src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.ts b/frontend/src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.ts index d809f2fa0..f11e03a28 100644 --- a/frontend/src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.ts @@ -2,11 +2,11 @@ import { ActivatedRoute, Router } from '@angular/router'; import { Component, OnInit, ChangeDetectionStrategy, Input, Inject, LOCALE_ID, ChangeDetectorRef } from '@angular/core'; import { BehaviorSubject, Observable, Subject, Subscription, combineLatest, of, timer } from 'rxjs'; import { delayWhen, filter, map, share, shareReplay, switchMap, take, takeUntil, tap, throttleTime } from 'rxjs/operators'; -import { ApiService } from '../../../services/api.service'; -import { Env, StateService } from '../../../services/state.service'; -import { AuditStatus, CurrentPegs, RecentPeg } from '../../../interfaces/node-api.interface'; -import { WebsocketService } from '../../../services/websocket.service'; -import { SeoService } from '../../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { Env, StateService } from '@app/services/state.service'; +import { AuditStatus, CurrentPegs, RecentPeg } from '@interfaces/node-api.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { SeoService } from '@app/services/seo.service'; @Component({ selector: 'app-recent-pegs-list', diff --git a/frontend/src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.ts b/frontend/src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.ts index 7bf8e6910..29033b848 100644 --- a/frontend/src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { PegsVolume } from '../../../interfaces/node-api.interface'; +import { PegsVolume } from '@interfaces/node-api.interface'; @Component({ selector: 'app-recent-pegs-stats', diff --git a/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.scss b/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.scss index 9881148fc..b58e706e5 100644 --- a/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.scss +++ b/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.scss @@ -2,5 +2,5 @@ position: absolute; top: 50%; left: calc(50% - 16px); - z-index: 100; + z-index: 99; } \ No newline at end of file diff --git a/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts b/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts index 45cd63db0..770940325 100644 --- a/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts @@ -1,6 +1,6 @@ import { Component, ChangeDetectionStrategy, Input, OnChanges, OnInit, HostListener } from '@angular/core'; -import { EChartsOption } from '../../../graphs/echarts'; -import { CurrentPegs } from '../../../interfaces/node-api.interface'; +import { EChartsOption } from '@app/graphs/echarts'; +import { CurrentPegs } from '@interfaces/node-api.interface'; @Component({ diff --git a/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.ts b/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.ts index 61f2deb8c..97d1b3da0 100644 --- a/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { Env, StateService } from '../../../services/state.service'; -import { CurrentPegs } from '../../../interfaces/node-api.interface'; +import { Env, StateService } from '@app/services/state.service'; +import { CurrentPegs } from '@interfaces/node-api.interface'; @Component({ selector: 'app-reserves-supply-stats', diff --git a/frontend/src/app/components/loading-indicator/loading-indicator.component.scss b/frontend/src/app/components/loading-indicator/loading-indicator.component.scss index b919fa2b8..af84083b7 100644 --- a/frontend/src/app/components/loading-indicator/loading-indicator.component.scss +++ b/frontend/src/app/components/loading-indicator/loading-indicator.component.scss @@ -1,7 +1,7 @@ .sticky-loading { position: absolute; right: 10px; - z-index: 100; + z-index: 1000; font-size: 14px; @media (width >= 992px) { left: 32px; diff --git a/frontend/src/app/components/loading-indicator/loading-indicator.component.ts b/frontend/src/app/components/loading-indicator/loading-indicator.component.ts index 83a5ccc72..9cdb0bd06 100644 --- a/frontend/src/app/components/loading-indicator/loading-indicator.component.ts +++ b/frontend/src/app/components/loading-indicator/loading-indicator.component.ts @@ -1,8 +1,8 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-loading-indicator', diff --git a/frontend/src/app/components/master-page-preview/master-page-preview.component.ts b/frontend/src/app/components/master-page-preview/master-page-preview.component.ts index 64bdcfda2..c9db2b143 100644 --- a/frontend/src/app/components/master-page-preview/master-page-preview.component.ts +++ b/frontend/src/app/components/master-page-preview/master-page-preview.component.ts @@ -1,8 +1,8 @@ import { Component, OnInit } from '@angular/core'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; import { Observable, Subscription, merge, of } from 'rxjs'; -import { LanguageService } from '../../services/language.service'; -import { EnterpriseService } from '../../services/enterprise.service'; +import { LanguageService } from '@app/services/language.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; @Component({ selector: 'app-master-page-preview', diff --git a/frontend/src/app/components/master-page-preview/preview-title.component.ts b/frontend/src/app/components/master-page-preview/preview-title.component.ts index a26368c89..07883475b 100644 --- a/frontend/src/app/components/master-page-preview/preview-title.component.ts +++ b/frontend/src/app/components/master-page-preview/preview-title.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; import { Observable, merge, of } from 'rxjs'; @Component({ diff --git a/frontend/src/app/components/master-page/master-page.component.html b/frontend/src/app/components/master-page/master-page.component.html index ea20cdf95..557529eef 100644 --- a/frontend/src/app/components/master-page/master-page.component.html +++ b/frontend/src/app/components/master-page/master-page.component.html @@ -70,7 +70,7 @@ Mainnet Signet Testnet3 - Testnet4 beta + Testnet4 Liquid Liquid Testnet
@@ -85,7 +85,6 @@
-
+ +
diff --git a/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts b/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts index 13608bb73..3e429fa9f 100644 --- a/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts +++ b/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts @@ -1,17 +1,17 @@ -import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef, HostListener, Input, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core'; +import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef, HostListener, Input, OnChanges, SimpleChanges, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core'; import { Subscription, Observable, of, combineLatest } from 'rxjs'; -import { MempoolBlock } from '../../interfaces/websocket.interface'; -import { StateService } from '../../services/state.service'; -import { EtaService } from '../../services/eta.service'; +import { MempoolBlock } from '@interfaces/websocket.interface'; +import { StateService } from '@app/services/state.service'; +import { EtaService } from '@app/services/eta.service'; import { Router } from '@angular/router'; import { delay, filter, map, switchMap, tap } from 'rxjs/operators'; -import { feeLevels } from '../../app.constants'; -import { specialBlocks } from '../../app.constants'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { feeLevels } from '@app/app.constants'; +import { specialBlocks } from '@app/app.constants'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; import { Location } from '@angular/common'; -import { DifficultyAdjustment, MempoolPosition } from '../../interfaces/node-api.interface'; +import { DifficultyAdjustment, MempoolPosition } from '@interfaces/node-api.interface'; import { animate, style, transition, trigger } from '@angular/animations'; -import { ThemeService } from '../../services/theme.service'; +import { ThemeService } from '@app/services/theme.service'; @Component({ selector: 'app-mempool-blocks', @@ -77,6 +77,9 @@ export class MempoolBlocksComponent implements OnInit, OnChanges, OnDestroy { maxArrowPosition = 0; rightPosition = 0; transition = 'background 2s, right 2s, transform 1s'; + @ViewChild('arrowUp') + arrowElement: ElementRef; + acceleratingArrow: boolean = false; markIndex: number; txPosition: MempoolPosition; @@ -201,6 +204,7 @@ export class MempoolBlocksComponent implements OnInit, OnChanges, OnDestroy { this.markBlocksSubscription = this.stateService.markBlock$ .subscribe((state) => { + const oldTxPosition = this.txPosition; this.markIndex = undefined; this.txPosition = undefined; this.txFeePerVSize = undefined; @@ -209,6 +213,12 @@ export class MempoolBlocksComponent implements OnInit, OnChanges, OnDestroy { } if (state.mempoolPosition) { this.txPosition = state.mempoolPosition; + if (this.txPosition.accelerated && !oldTxPosition?.accelerated) { + this.acceleratingArrow = true; + setTimeout(() => { + this.acceleratingArrow = false; + }, 2000); + } } if (state.txFeePerVSize) { this.txFeePerVSize = state.txFeePerVSize; @@ -257,7 +267,7 @@ export class MempoolBlocksComponent implements OnInit, OnChanges, OnDestroy { if (event.key === prevKey) { if (this.mempoolBlocks[this.markIndex - 1]) { - this.router.navigate([this.relativeUrlPipe.transform('mempool-block/'), this.markIndex - 1]); + this.router.navigate([this.relativeUrlPipe.transform('/mempool-block/'), this.markIndex - 1]); } else { const blocks = this.stateService.blocksSubject$.getValue(); for (const block of (blocks || [])) { @@ -462,4 +472,4 @@ export class MempoolBlocksComponent implements OnInit, OnChanges, OnDestroy { } return emptyBlocks; } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts index 63fb52a0c..15e6c6f7a 100644 --- a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts +++ b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts @@ -1,14 +1,14 @@ import { Component, OnInit, Input, Inject, LOCALE_ID, ChangeDetectionStrategy, OnChanges } from '@angular/core'; -import { VbytesPipe } from '../../shared/pipes/bytes-pipe/vbytes.pipe'; -import { WuBytesPipe } from '../../shared/pipes/bytes-pipe/wubytes.pipe'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; +import { VbytesPipe } from '@app/shared/pipes/bytes-pipe/vbytes.pipe'; +import { WuBytesPipe } from '@app/shared/pipes/bytes-pipe/wubytes.pipe'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; import { formatNumber } from '@angular/common'; -import { OptimizedMempoolStats } from '../../interfaces/node-api.interface'; -import { StateService } from '../../services/state.service'; -import { StorageService } from '../../services/storage.service'; -import { EChartsOption } from '../../graphs/echarts'; -import { feeLevels, chartColors } from '../../app.constants'; -import { download, formatterXAxis, formatterXAxisLabel } from '../../shared/graphs.utils'; +import { OptimizedMempoolStats } from '@interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { StorageService } from '@app/services/storage.service'; +import { EChartsOption } from '@app/graphs/echarts'; +import { feeLevels, chartColors } from '@app/app.constants'; +import { download, formatterXAxis, formatterXAxisLabel } from '@app/shared/graphs.utils'; @Component({ selector: 'app-mempool-graph', @@ -18,7 +18,7 @@ import { download, formatterXAxis, formatterXAxisLabel } from '../../shared/grap position: absolute; top: 50%; left: calc(50% - 16px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/menu/menu.component.html b/frontend/src/app/components/menu/menu.component.html index 23605ce55..848f505a1 100644 --- a/frontend/src/app/components/menu/menu.component.html +++ b/frontend/src/app/components/menu/menu.component.html @@ -12,9 +12,15 @@ OG #{{ user.ogRank }} - - {{ user.subscription_tag.toUpperCase() }} - + @if (user.subscription_tag !== 'free') { + + {{ user.subscription_tag.toUpperCase() }} + + } @else if (user.type === 'mining_pool') { + + MINING POOL + + } diff --git a/frontend/src/app/components/menu/menu.component.ts b/frontend/src/app/components/menu/menu.component.ts index 719495bb0..278ec46a1 100644 --- a/frontend/src/app/components/menu/menu.component.ts +++ b/frontend/src/app/components/menu/menu.component.ts @@ -1,11 +1,11 @@ import { Component, OnInit, Input, Output, EventEmitter, HostListener, OnDestroy } from '@angular/core'; import { Observable } from 'rxjs'; -import { MenuGroup } from '../../interfaces/services.interface'; -import { StorageService } from '../../services/storage.service'; +import { MenuGroup } from '@interfaces/services.interface'; +import { StorageService } from '@app/services/storage.service'; import { Router, NavigationStart } from '@angular/router'; -import { StateService } from '../../services/state.service'; -import { IUser, ServicesApiServices } from '../../services/services-api.service'; -import { AuthServiceMempool } from '../../services/auth.service'; +import { StateService } from '@app/services/state.service'; +import { IUser, ServicesApiServices } from '@app/services/services-api.service'; +import { AuthServiceMempool } from '@app/services/auth.service'; @Component({ selector: 'app-menu', diff --git a/frontend/src/app/components/mining-dashboard/mining-dashboard.component.ts b/frontend/src/app/components/mining-dashboard/mining-dashboard.component.ts index 0e0974808..464866c40 100644 --- a/frontend/src/app/components/mining-dashboard/mining-dashboard.component.ts +++ b/frontend/src/app/components/mining-dashboard/mining-dashboard.component.ts @@ -1,8 +1,8 @@ import { AfterViewInit, ChangeDetectionStrategy, Component, HostListener, OnInit } from '@angular/core'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { StateService } from '../../services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { StateService } from '@app/services/state.service'; import { EventType, NavigationStart, Router } from '@angular/router'; @Component({ diff --git a/frontend/src/app/components/ngx-bootstrap-multiselect/ngx-bootstrap-multiselect.component.ts b/frontend/src/app/components/ngx-bootstrap-multiselect/ngx-bootstrap-multiselect.component.ts index 8c5dcbfcb..bc835b4d2 100644 --- a/frontend/src/app/components/ngx-bootstrap-multiselect/ngx-bootstrap-multiselect.component.ts +++ b/frontend/src/app/components/ngx-bootstrap-multiselect/ngx-bootstrap-multiselect.component.ts @@ -24,8 +24,8 @@ import { } from '@angular/forms'; import { takeUntil } from 'rxjs/operators'; -import { MultiSelectSearchFilter } from './search-filter.pipe'; -import { IMultiSelectOption, IMultiSelectSettings, IMultiSelectTexts, } from './types'; +import { MultiSelectSearchFilter } from '@components/ngx-bootstrap-multiselect/search-filter.pipe'; +import { IMultiSelectOption, IMultiSelectSettings, IMultiSelectTexts, } from '@components/ngx-bootstrap-multiselect/types'; import { Subject, Observable } from 'rxjs'; const MULTISELECT_VALUE_ACCESSOR: any = { diff --git a/frontend/src/app/components/ngx-bootstrap-multiselect/search-filter.pipe.ts b/frontend/src/app/components/ngx-bootstrap-multiselect/search-filter.pipe.ts index 1dfb57ffd..8c9232501 100644 --- a/frontend/src/app/components/ngx-bootstrap-multiselect/search-filter.pipe.ts +++ b/frontend/src/app/components/ngx-bootstrap-multiselect/search-filter.pipe.ts @@ -1,5 +1,5 @@ import { Pipe, PipeTransform } from '@angular/core'; -import { IMultiSelectOption } from './types'; +import { IMultiSelectOption } from '@components/ngx-bootstrap-multiselect/types'; interface StringHashMap { [k: string]: T; diff --git a/frontend/src/app/components/ord-data/ord-data.component.html b/frontend/src/app/components/ord-data/ord-data.component.html new file mode 100644 index 000000000..8e58e66a4 --- /dev/null +++ b/frontend/src/app/components/ord-data/ord-data.component.html @@ -0,0 +1,65 @@ +@if (minted) { + + Mint + {{ minted >= 100000 ? (minted | amountShortener:undefined:undefined:true) : minted }} + + +} +@if (runestone?.etching?.supply) { + @if (runestone?.etching.premine > 0) { + + Premine + {{ getAmount(runestone.etching.premine, runestone.etching.divisibility || 0) >= 100000 ? (getAmount(runestone.etching.premine, runestone.etching.divisibility || 0) | amountShortener:undefined:undefined:true) : getAmount(runestone.etching.premine, runestone.etching.divisibility || 0) }} + {{ runestone.etching.symbol }} + {{ runestone.etching.spacedName }} + ({{ toNumber(runestone.etching.premine) / toNumber(runestone.etching.supply) * 100 | amountShortener:0}}% of total supply) + + } @else { + + Etching of + {{ runestone.etching.symbol }} + {{ runestone.etching.spacedName }} + + } +} +@if (transferredRunes?.length && type === 'vout') { +
+ + Transfer + + +
+} + +@if (inscriptions?.length && type === 'vin') { +
+} + +@if (!runestone && type === 'vout') { +
+} + +@if ((runestone && !minted && !runestone.etching?.supply && !transferredRunes?.length && type === 'vout') || (!inscriptions?.length && type === 'vin')) { + Error decoding data +} + + + {{ runeInfo[id]?.etching.symbol || '' }} + + {{ runeInfo[id]?.etching.spacedName }} + + \ No newline at end of file diff --git a/frontend/src/app/components/ord-data/ord-data.component.scss b/frontend/src/app/components/ord-data/ord-data.component.scss new file mode 100644 index 000000000..b218359d9 --- /dev/null +++ b/frontend/src/app/components/ord-data/ord-data.component.scss @@ -0,0 +1,35 @@ +.amount { + font-weight: bold; +} + +a.rune-link { + color: inherit; + &:hover { + text-decoration: underline; + text-decoration-color: var(--transparent-fg); + } +} + +a.disabled { + text-decoration: none; +} + +.name { + color: var(--transparent-fg); + font-weight: 700; +} + +.badge-ord { + background-color: var(--grey); + position: relative; + top: -2px; + font-size: 81%; + &.primary { + background-color: var(--primary); + } +} + +pre { + margin-top: 5px; + max-height: 200px; +} \ No newline at end of file diff --git a/frontend/src/app/components/ord-data/ord-data.component.ts b/frontend/src/app/components/ord-data/ord-data.component.ts new file mode 100644 index 000000000..4c0318718 --- /dev/null +++ b/frontend/src/app/components/ord-data/ord-data.component.ts @@ -0,0 +1,87 @@ +import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core'; +import { Runestone, Etching } from '@app/shared/ord/rune.utils'; +import { Inscription } from '@app/shared/ord/inscription.utils'; + +@Component({ + selector: 'app-ord-data', + templateUrl: './ord-data.component.html', + styleUrls: ['./ord-data.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class OrdDataComponent implements OnChanges { + @Input() inscriptions: Inscription[]; + @Input() runestone: Runestone; + @Input() runeInfo: { [id: string]: { etching: Etching; txid: string } }; + @Input() type: 'vin' | 'vout'; + + toNumber = (value: bigint): number => Number(value); + + // Inscriptions + inscriptionsData: { [key: string]: { count: number, totalSize: number, text?: string; json?: JSON; tag?: string; delegate?: string } }; + // Rune mints + minted: number; + // Rune transfers + transferredRunes: { key: string; etching: Etching; txid: string }[] = []; + + constructor() { } + + ngOnChanges(changes: SimpleChanges): void { + if (changes.runestone && this.runestone) { + if (this.runestone.mint && this.runeInfo[this.runestone.mint.toString()]) { + const mint = this.runestone.mint.toString(); + const terms = this.runeInfo[mint].etching.terms; + const amount = terms?.amount; + const divisibility = this.runeInfo[mint].etching.divisibility; + if (amount) { + this.minted = this.getAmount(amount, divisibility); + } + } + + this.runestone.edicts.forEach(edict => { + if (this.runeInfo[edict.id.toString()]) { + this.transferredRunes.push({ key: edict.id.toString(), ...this.runeInfo[edict.id.toString()] }); + } + }); + } + + if (changes.inscriptions && this.inscriptions) { + + if (this.inscriptions?.length) { + this.inscriptionsData = {}; + this.inscriptions.forEach((inscription) => { + // General: count, total size, delegate + const key = inscription.content_type_str || 'undefined'; + if (!this.inscriptionsData[key]) { + this.inscriptionsData[key] = { count: 0, totalSize: 0 }; + } + this.inscriptionsData[key].count++; + this.inscriptionsData[key].totalSize += inscription.body_length; + if (inscription.delegate_txid && !this.inscriptionsData[key].delegate) { + this.inscriptionsData[key].delegate = inscription.delegate_txid; + } + + // Text / JSON data + if ((key.includes('text') || key.includes('json')) && !inscription.is_cropped && !this.inscriptionsData[key].text && !this.inscriptionsData[key].json) { + const decoder = new TextDecoder('utf-8'); + const text = decoder.decode(inscription.body); + try { + this.inscriptionsData[key].json = JSON.parse(text); + if (this.inscriptionsData[key].json['p']) { + this.inscriptionsData[key].tag = this.inscriptionsData[key].json['p'].toUpperCase(); + } + } catch (e) { + this.inscriptionsData[key].text = text; + } + } + }); + } + } + } + + getAmount(amount: bigint, divisibility: number): number { + const divisor = BigInt(10) ** BigInt(divisibility); + const result = amount / divisor; + + return result <= BigInt(Number.MAX_SAFE_INTEGER) ? Number(result) : Number.MAX_SAFE_INTEGER; + } +} diff --git a/frontend/src/app/components/pool-ranking/pool-ranking.component.html b/frontend/src/app/components/pool-ranking/pool-ranking.component.html index 7600797cb..f6aa4d4b9 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.html +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.html @@ -90,9 +90,9 @@ Rank Pool - Hashrate + Hashrate Blocks - Avg Health Avg Block Fees Empty Blocks @@ -105,12 +105,13 @@ {{ pool.name }} - {{ pool.lastEstimatedHashrate | number: '1.2-2' }} {{ - miningStats.miningUnits.hashrateUnit }} + {{ pool.lastEstimatedHashrate | number: '1.2-2' }} {{ miningStats.miningUnits.hashrateUnit }} + {{ pool.lastEstimatedHashrate3d | number: '1.2-2' }} {{ miningStats.miningUnits.hashrateUnit }} + {{ pool.lastEstimatedHashrate1w | number: '1.2-2' }} {{ miningStats.miningUnits.hashrateUnit }} {{ pool.blockCount }} ({{ pool.share }}%) - + All miners - {{ miningStats.lastEstimatedHashrate | number: '1.2-2' }} {{ - miningStats.miningUnits.hashrateUnit }} + {{ miningStats.lastEstimatedHashrate| number: '1.2-2' }} {{ miningStats.miningUnits.hashrateUnit }} + {{ miningStats.lastEstimatedHashrate3d | number: '1.2-2' }} {{ miningStats.miningUnits.hashrateUnit }} + {{ miningStats.lastEstimatedHashrate1w | number: '1.2-2' }} {{ miningStats.miningUnits.hashrateUnit }} {{ miningStats.blockCount }} diff --git a/frontend/src/app/components/pool-ranking/pool-ranking.component.scss b/frontend/src/app/components/pool-ranking/pool-ranking.component.scss index 9001fc085..cf53ebe14 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.scss +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.scss @@ -60,7 +60,7 @@ position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } .pool-distribution { diff --git a/frontend/src/app/components/pool-ranking/pool-ranking.component.ts b/frontend/src/app/components/pool-ranking/pool-ranking.component.ts index 2e8a820be..de7f9b2e0 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.ts +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.ts @@ -1,17 +1,17 @@ import { ChangeDetectionStrategy, Component, Input, NgZone, OnInit, HostBinding } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; -import { EChartsOption, PieSeriesOption } from '../../graphs/echarts'; +import { EChartsOption, PieSeriesOption } from '@app/graphs/echarts'; import { merge, Observable } from 'rxjs'; import { map, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'; -import { SeoService } from '../../services/seo.service'; -import { StorageService } from '../..//services/storage.service'; -import { MiningService, MiningStats } from '../../services/mining.service'; -import { StateService } from '../../services/state.service'; -import { chartColors, poolsColor } from '../../app.constants'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { download } from '../../shared/graphs.utils'; -import { isMobile } from '../../shared/common.utils'; +import { SeoService } from '@app/services/seo.service'; +import { StorageService } from '@app//services/storage.service'; +import { MiningService, MiningStats } from '@app/services/mining.service'; +import { StateService } from '@app/services/state.service'; +import { chartColors, poolsColor } from '@app/app.constants'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { download } from '@app/shared/graphs.utils'; +import { isMobile } from '@app/shared/common.utils'; @Component({ selector: 'app-pool-ranking', @@ -161,9 +161,12 @@ export class PoolRankingComponent implements OnInit { borderColor: '#000', formatter: () => { const i = pool.blockCount.toString(); - if (this.miningWindowPreference === '24h') { + if (['24h', '3d', '1w'].includes(this.miningWindowPreference)) { + let hashrate = pool.lastEstimatedHashrate; + if ('3d' === this.miningWindowPreference) { hashrate = pool.lastEstimatedHashrate3d; } + if ('1w' === this.miningWindowPreference) { hashrate = pool.lastEstimatedHashrate1w; } return `${pool.name} (${pool.share}%)
` + - pool.lastEstimatedHashrate.toFixed(2) + ' ' + miningStats.miningUnits.hashrateUnit + + hashrate.toFixed(2) + ' ' + miningStats.miningUnits.hashrateUnit + `
` + $localize`${ i }:INTERPOLATION: blocks`; } else { return `${pool.name} (${pool.share}%)
` + @@ -200,13 +203,10 @@ export class PoolRankingComponent implements OnInit { borderColor: '#000', formatter: () => { const i = totalBlockOther.toString(); - if (this.miningWindowPreference === '24h') { - return `` + $localize`Other (${percentage})` + `
` + - totalEstimatedHashrateOther.toString() + ' ' + miningStats.miningUnits.hashrateUnit + - `
` + $localize`${ i }:INTERPOLATION: blocks`; + if (['24h', '3d', '1w'].includes(this.miningWindowPreference)) { + return `` + $localize`Other (${percentage})` + `
` + totalEstimatedHashrateOther.toFixed(2) + ' ' + miningStats.miningUnits.hashrateUnit + `
` + $localize`${ i }:INTERPOLATION: blocks`; } else { - return `` + $localize`Other (${percentage})` + `
` + - $localize`${ i }:INTERPOLATION: blocks`; + return `` + $localize`Other (${percentage})` + `
` + $localize`${ i }:INTERPOLATION: blocks`; } } }, @@ -292,6 +292,8 @@ export class PoolRankingComponent implements OnInit { getEmptyMiningStat(): MiningStats { return { lastEstimatedHashrate: 0, + lastEstimatedHashrate3d: 0, + lastEstimatedHashrate1w: 0, blockCount: 0, totalEmptyBlock: 0, totalEmptyBlockRatio: '', diff --git a/frontend/src/app/components/pool/pool-preview.component.ts b/frontend/src/app/components/pool/pool-preview.component.ts index e0c786082..93077120d 100644 --- a/frontend/src/app/components/pool/pool-preview.component.ts +++ b/frontend/src/app/components/pool/pool-preview.component.ts @@ -1,14 +1,14 @@ import { ChangeDetectionStrategy, Component, Inject, LOCALE_ID, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { Observable, of } from 'rxjs'; import { map, switchMap, catchError } from 'rxjs/operators'; -import { PoolStat } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; +import { PoolStat } from '@interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; import { formatNumber } from '@angular/common'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; @Component({ selector: 'app-pool-preview', diff --git a/frontend/src/app/components/pool/pool.component.scss b/frontend/src/app/components/pool/pool.component.scss index 36bdc93e9..5c2fedd26 100644 --- a/frontend/src/app/components/pool/pool.component.scss +++ b/frontend/src/app/components/pool/pool.component.scss @@ -167,7 +167,7 @@ div.scrollable { .loadingGraphs { position: absolute; left: calc(50% - 15px); - z-index: 100; + z-index: 99; top: 475px; @media (max-width: 992px) { top: 600px; diff --git a/frontend/src/app/components/pool/pool.component.ts b/frontend/src/app/components/pool/pool.component.ts index 6564a5dd9..1893f0a48 100644 --- a/frontend/src/app/components/pool/pool.component.ts +++ b/frontend/src/app/components/pool/pool.component.ts @@ -1,14 +1,14 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { BehaviorSubject, Observable, Subscription, combineLatest, of } from 'rxjs'; import { catchError, distinctUntilChanged, filter, map, share, switchMap, tap } from 'rxjs/operators'; -import { BlockExtended, PoolStat } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; -import { selectPowerOfTen } from '../../bitcoin.utils'; +import { BlockExtended, PoolStat } from '@interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { selectPowerOfTen } from '@app/bitcoin.utils'; import { formatNumber } from '@angular/common'; -import { SeoService } from '../../services/seo.service'; +import { SeoService } from '@app/services/seo.service'; import { HttpErrorResponse } from '@angular/common/http'; interface AccelerationTotal { diff --git a/frontend/src/app/components/privacy-policy/privacy-policy.component.html b/frontend/src/app/components/privacy-policy/privacy-policy.component.html index effdf29f2..06b09ad30 100644 --- a/frontend/src/app/components/privacy-policy/privacy-policy.component.html +++ b/frontend/src/app/components/privacy-policy/privacy-policy.component.html @@ -5,7 +5,7 @@

Privacy Policy

-
Updated: July 10, 2024
+
Updated: July 31, 2024


@@ -27,7 +27,7 @@
-

General

+

USING THIS WEBSITE

Out of respect for the Bitcoin community, this Website does not use any third-party analytics, third-party trackers, or third-party cookies, and we do not share any private user data with third-parties. Additionally, to mitigate the risk of surveillance by malicious third-parties, we self-host this Website on our own hardware and network infrastructure, so there are no "hosting companies" or "cloud providers" involved with the operation of this Website.

@@ -35,7 +35,7 @@
\ No newline at end of file diff --git a/frontend/src/app/components/push-transaction/push-transaction.component.ts b/frontend/src/app/components/push-transaction/push-transaction.component.ts index 03a050dfa..221333edb 100644 --- a/frontend/src/app/components/push-transaction/push-transaction.component.ts +++ b/frontend/src/app/components/push-transaction/push-transaction.component.ts @@ -1,12 +1,13 @@ import { Component, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; import { ActivatedRoute, Router } from '@angular/router'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { TxResult } from '@interfaces/node-api.interface'; @Component({ selector: 'app-push-transaction', @@ -19,6 +20,16 @@ export class PushTransactionComponent implements OnInit { txId: string = ''; isLoading = false; + submitTxsForm: UntypedFormGroup; + errorPackage: string = ''; + packageMessage: string = ''; + results: TxResult[] = []; + invalidMaxfeerate = false; + invalidMaxburnamount = false; + isLoadingPackage = false; + + network = this.stateService.network; + constructor( private formBuilder: UntypedFormBuilder, private apiService: ApiService, @@ -35,6 +46,14 @@ export class PushTransactionComponent implements OnInit { txHash: ['', Validators.required], }); + this.submitTxsForm = this.formBuilder.group({ + txs: ['', Validators.required], + maxfeerate: ['', Validators.min(0)], + maxburnamount: ['', Validators.min(0)], + }); + + this.stateService.networkChanged$.subscribe((network) => this.network = network); + this.seoService.setTitle($localize`:@@meta.title.push-tx:Broadcast Transaction`); this.seoService.setDescription($localize`:@@meta.description.push-tx:Broadcast a transaction to the ${this.stateService.network==='liquid'||this.stateService.network==='liquidtestnet'?'Liquid':'Bitcoin'}${seoDescriptionNetwork(this.stateService.network)} network using the transaction's hash.`); this.ogService.setManualOgImage('tx-push.jpg'); @@ -59,7 +78,7 @@ export class PushTransactionComponent implements OnInit { }, (error) => { if (typeof error.error === 'string') { - const matchText = error.error.match('"message":"(.*?)"'); + const matchText = error.error.replace(/\\/g, '').match('"message":"(.*?)"'); this.error = 'Failed to broadcast transaction, reason: ' + (matchText && matchText[1] || error.error); } else if (error.message) { this.error = 'Failed to broadcast transaction, reason: ' + error.message; @@ -70,6 +89,67 @@ export class PushTransactionComponent implements OnInit { }); } + submitTxs() { + let txs: string[] = []; + try { + txs = (this.submitTxsForm.get('txs')?.value as string).split(',').map(hex => hex.trim()); + if (txs?.length === 1) { + this.pushTxForm.get('txHash').setValue(txs[0]); + this.submitTxsForm.get('txs').setValue(''); + this.postTx(); + return; + } + } catch (e) { + this.errorPackage = e?.message; + return; + } + + let maxfeerate; + let maxburnamount; + this.invalidMaxfeerate = false; + this.invalidMaxburnamount = false; + try { + const maxfeerateVal = this.submitTxsForm.get('maxfeerate')?.value; + if (maxfeerateVal != null && maxfeerateVal !== '') { + maxfeerate = parseFloat(maxfeerateVal) / 100_000; + } + } catch (e) { + this.invalidMaxfeerate = true; + } + try { + const maxburnamountVal = this.submitTxsForm.get('maxburnamount')?.value; + if (maxburnamountVal != null && maxburnamountVal !== '') { + maxburnamount = parseInt(maxburnamountVal) / 100_000_000; + } + } catch (e) { + this.invalidMaxburnamount = true; + } + + this.isLoadingPackage = true; + this.errorPackage = ''; + this.results = []; + this.apiService.submitPackage$(txs, maxfeerate === 0.1 ? null : maxfeerate, maxburnamount === 0 ? null : maxburnamount) + .subscribe((result) => { + this.isLoadingPackage = false; + + this.packageMessage = result['package_msg']; + for (let wtxid in result['tx-results']) { + this.results.push(result['tx-results'][wtxid]); + } + + this.submitTxsForm.reset(); + }, + (error) => { + if (typeof error.error?.error === 'string') { + const matchText = error.error.error.replace(/\\/g, '').match('"message":"(.*?)"'); + this.errorPackage = matchText && matchText[1] || error.error.error; + } else if (error.message) { + this.errorPackage = error.message; + } + this.isLoadingPackage = false; + }); + } + private async handleColdcardPushTx(fragmentParams: URLSearchParams): Promise { // maybe conforms to Coldcard nfc-pushtx spec if (fragmentParams && fragmentParams.get('t')) { diff --git a/frontend/src/app/components/qrcode/qrcode.component.ts b/frontend/src/app/components/qrcode/qrcode.component.ts index f377895c0..061625eed 100644 --- a/frontend/src/app/components/qrcode/qrcode.component.ts +++ b/frontend/src/app/components/qrcode/qrcode.component.ts @@ -1,6 +1,6 @@ import { Component, Input, AfterViewInit, ViewChild, ElementRef, ChangeDetectionStrategy } from '@angular/core'; import * as QRCode from 'qrcode'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-qrcode', diff --git a/frontend/src/app/components/rate-unit-selector/rate-unit-selector.component.ts b/frontend/src/app/components/rate-unit-selector/rate-unit-selector.component.ts index a7d94cec2..5e6b324bf 100644 --- a/frontend/src/app/components/rate-unit-selector/rate-unit-selector.component.ts +++ b/frontend/src/app/components/rate-unit-selector/rate-unit-selector.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { StorageService } from '../../services/storage.service'; -import { StateService } from '../../services/state.service'; +import { StorageService } from '@app/services/storage.service'; +import { StateService } from '@app/services/state.service'; import { Subscription } from 'rxjs'; @Component({ diff --git a/frontend/src/app/components/rbf-list/rbf-list.component.ts b/frontend/src/app/components/rbf-list/rbf-list.component.ts index 25f7dea2e..d835b4a59 100644 --- a/frontend/src/app/components/rbf-list/rbf-list.component.ts +++ b/frontend/src/app/components/rbf-list/rbf-list.component.ts @@ -2,13 +2,13 @@ import { Component, OnInit, ChangeDetectionStrategy, OnDestroy } from '@angular/ import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject, EMPTY, merge, Observable, Subscription } from 'rxjs'; import { catchError, switchMap, tap } from 'rxjs/operators'; -import { WebsocketService } from '../../services/websocket.service'; -import { RbfTree } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; +import { WebsocketService } from '@app/services/websocket.service'; +import { RbfTree } from '@interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; @Component({ selector: 'app-rbf-list', diff --git a/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html b/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html index 46cda0488..19c08bad9 100644 --- a/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html +++ b/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html @@ -19,7 +19,7 @@ Fee - {{ rbfInfo.tx.fee | number }} sat + {{ rbfInfo.tx.fee | number }} sats Virtual size diff --git a/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.ts b/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.ts index fc3748f32..3368eeaf3 100644 --- a/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.ts +++ b/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.ts @@ -1,5 +1,5 @@ import { Component, ElementRef, ViewChild, Input, OnChanges } from '@angular/core'; -import { RbfTree } from '../../interfaces/node-api.interface'; +import { RbfTree } from '@interfaces/node-api.interface'; @Component({ selector: 'app-rbf-timeline-tooltip', diff --git a/frontend/src/app/components/rbf-timeline/rbf-timeline.component.ts b/frontend/src/app/components/rbf-timeline/rbf-timeline.component.ts index 83654a137..8bf5a0694 100644 --- a/frontend/src/app/components/rbf-timeline/rbf-timeline.component.ts +++ b/frontend/src/app/components/rbf-timeline/rbf-timeline.component.ts @@ -1,8 +1,8 @@ import { Component, Input, OnInit, OnChanges, Inject, LOCALE_ID, HostListener } from '@angular/core'; import { Router } from '@angular/router'; -import { RbfTree, RbfTransaction } from '../../interfaces/node-api.interface'; -import { StateService } from '../../services/state.service'; -import { ApiService } from '../../services/api.service'; +import { RbfTree, RbfTransaction } from '@interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { ApiService } from '@app/services/api.service'; type Connector = 'pipe' | 'corner'; diff --git a/frontend/src/app/components/reward-stats/reward-stats.component.ts b/frontend/src/app/components/reward-stats/reward-stats.component.ts index 5aac641b0..34dc55222 100644 --- a/frontend/src/app/components/reward-stats/reward-stats.component.ts +++ b/frontend/src/app/components/reward-stats/reward-stats.component.ts @@ -1,8 +1,8 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { concat, Observable } from 'rxjs'; import { map, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-reward-stats', diff --git a/frontend/src/app/components/search-form/search-form.component.ts b/frontend/src/app/components/search-form/search-form.component.ts index 3f48861d5..c0654c372 100644 --- a/frontend/src/app/components/search-form/search-form.component.ts +++ b/frontend/src/app/components/search-form/search-form.component.ts @@ -1,15 +1,15 @@ import { Component, OnInit, ChangeDetectionStrategy, EventEmitter, Output, ViewChild, HostListener, ElementRef, Input } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { EventType, NavigationStart, Router } from '@angular/router'; -import { AssetsService } from '../../services/assets.service'; -import { Env, StateService } from '../../services/state.service'; +import { AssetsService } from '@app/services/assets.service'; +import { Env, StateService } from '@app/services/state.service'; import { Observable, of, Subject, zip, BehaviorSubject, combineLatest } from 'rxjs'; import { debounceTime, distinctUntilChanged, switchMap, catchError, map, startWith, tap } from 'rxjs/operators'; -import { ElectrsApiService } from '../../services/electrs-api.service'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { ApiService } from '../../services/api.service'; -import { SearchResultsComponent } from './search-results/search-results.component'; -import { Network, findOtherNetworks, getRegex, getTargetUrl, needBaseModuleChange } from '../../shared/regex.utils'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { ApiService } from '@app/services/api.service'; +import { SearchResultsComponent } from '@components/search-form/search-results/search-results.component'; +import { Network, findOtherNetworks, getRegex, getTargetUrl, needBaseModuleChange } from '@app/shared/regex.utils'; @Component({ selector: 'app-search-form', diff --git a/frontend/src/app/components/search-form/search-results/search-results.component.ts b/frontend/src/app/components/search-form/search-results/search-results.component.ts index 04976028b..6a4efcd87 100644 --- a/frontend/src/app/components/search-form/search-results/search-results.component.ts +++ b/frontend/src/app/components/search-form/search-results/search-results.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, OnChanges, Output } from '@angular/core'; -import { StateService } from '../../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-search-results', diff --git a/frontend/src/app/components/server-health/server-health.component.html b/frontend/src/app/components/server-health/server-health.component.html index e2f76d786..6a0a905f9 100644 --- a/frontend/src/app/components/server-health/server-health.component.html +++ b/frontend/src/app/components/server-health/server-health.component.html @@ -9,7 +9,7 @@
- +
@@ -27,7 +27,7 @@ - +
{{ getLastUpdateSeconds(host) }} {{ (host.rtt / 1000) | number : '1.1-1' }} {{ host.rtt == null ? '' : 's'}} {{ !host.checked ? '⏳' : (host.unreachable ? '🔥' : '✅') }} {{ host.rtt | number : '1.0-0' }} {{ host.rtt == null ? '' : 'ms'}} {{ !host.checked ? '⏳' : (host.unreachable ? '🔥' : '✅') }}{{ host.latestHeight }} {{ !host.checked ? '⏳' : (host.outOfSync ? '🚫' : (host.latestHeight && host.latestHeight < tip ? '🟧' : '✅')) }}{{ host.latestHeight }} {{ !host.checked ? '⏳' : (host.outOfSync ? '🚫' : (host.latestHeight && host.latestHeight < maxHeight ? '🟧' : '✅')) }}
diff --git a/frontend/src/app/components/server-health/server-health.component.ts b/frontend/src/app/components/server-health/server-health.component.ts index 37e23f12a..6f92c0c93 100644 --- a/frontend/src/app/components/server-health/server-health.component.ts +++ b/frontend/src/app/components/server-health/server-health.component.ts @@ -1,8 +1,8 @@ import { Component, OnInit, ChangeDetectionStrategy, SecurityContext, ChangeDetectorRef } from '@angular/core'; -import { WebsocketService } from '../../services/websocket.service'; -import { Observable, Subject, map } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { HealthCheckHost } from '../../interfaces/websocket.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { Observable, Subject, map, tap } from 'rxjs'; +import { StateService } from '@app/services/state.service'; +import { HealthCheckHost } from '@interfaces/websocket.interface'; import { DomSanitizer } from '@angular/platform-browser'; @Component({ @@ -13,7 +13,7 @@ import { DomSanitizer } from '@angular/platform-browser'; }) export class ServerHealthComponent implements OnInit { hosts$: Observable; - tip$: Subject; + maxHeight: number; interval: number; now: number = Date.now(); @@ -44,9 +44,14 @@ export class ServerHealthComponent implements OnInit { host.flag = this.parseFlag(host.host); } return hosts; + }), + tap(hosts => { + let newMaxHeight = 0; + for (const host of hosts) { + newMaxHeight = Math.max(newMaxHeight, host.latestHeight); + } }) ); - this.tip$ = this.stateService.chainTip$; this.websocketService.want(['mempool-blocks', 'stats', 'blocks', 'tomahawk']); this.interval = window.setInterval(() => { diff --git a/frontend/src/app/components/server-health/server-status.component.ts b/frontend/src/app/components/server-health/server-status.component.ts index e1300a68d..7941d326d 100644 --- a/frontend/src/app/components/server-health/server-status.component.ts +++ b/frontend/src/app/components/server-health/server-status.component.ts @@ -1,8 +1,8 @@ import { Component, OnInit, ChangeDetectionStrategy, SecurityContext, OnDestroy, ChangeDetectorRef } from '@angular/core'; -import { WebsocketService } from '../../services/websocket.service'; +import { WebsocketService } from '@app/services/websocket.service'; import { Observable, Subject, Subscription, map, tap } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { HealthCheckHost } from '../../interfaces/websocket.interface'; +import { StateService } from '@app/services/state.service'; +import { HealthCheckHost } from '@interfaces/websocket.interface'; import { DomSanitizer } from '@angular/platform-browser'; @Component({ diff --git a/frontend/src/app/components/start/start.component.ts b/frontend/src/app/components/start/start.component.ts index 78c31cde5..31317cab5 100644 --- a/frontend/src/app/components/start/start.component.ts +++ b/frontend/src/app/components/start/start.component.ts @@ -1,8 +1,10 @@ import { Component, ElementRef, HostListener, OnInit, OnDestroy, ViewChild, Input, ChangeDetectorRef, ChangeDetectionStrategy, AfterViewChecked } from '@angular/core'; import { Subscription } from 'rxjs'; -import { MarkBlockState, StateService } from '../../services/state.service'; -import { specialBlocks } from '../../app.constants'; -import { BlockExtended } from '../../interfaces/node-api.interface'; +import { MarkBlockState, StateService } from '@app/services/state.service'; +import { specialBlocks } from '@app/app.constants'; +import { BlockExtended } from '@interfaces/node-api.interface'; +import { Router, ActivatedRoute } from '@angular/router'; +import { handleDemoRedirect } from '../../shared/common.utils'; @Component({ selector: 'app-start', @@ -61,6 +63,8 @@ export class StartComponent implements OnInit, AfterViewChecked, OnDestroy { constructor( public stateService: StateService, private cd: ChangeDetectorRef, + private router: Router, + private route: ActivatedRoute ) { this.isiOS = ['iPhone','iPod','iPad'].includes((navigator as any)?.userAgentData?.platform || navigator.platform); if (this.stateService.network === '') { @@ -69,6 +73,8 @@ export class StartComponent implements OnInit, AfterViewChecked, OnDestroy { } ngOnInit() { + handleDemoRedirect(this.route, this.router); + this.firstPageWidth = 40 + (this.blockWidth * this.dynamicBlocksAmount); this.blockCounterSubscription = this.stateService.blocks$.subscribe((blocks) => { this.blockCount = blocks.length; diff --git a/frontend/src/app/components/statistics/statistics.component.ts b/frontend/src/app/components/statistics/statistics.component.ts index 835b74227..9dda3c496 100644 --- a/frontend/src/app/components/statistics/statistics.component.ts +++ b/frontend/src/app/components/statistics/statistics.component.ts @@ -4,16 +4,16 @@ import { UntypedFormGroup, UntypedFormBuilder } from '@angular/forms'; import { of, merge} from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { OptimizedMempoolStats } from '../../interfaces/node-api.interface'; -import { WebsocketService } from '../../services/websocket.service'; -import { ApiService } from '../../services/api.service'; +import { OptimizedMempoolStats } from '@interfaces/node-api.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { ApiService } from '@app/services/api.service'; -import { StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { StorageService } from '../../services/storage.service'; -import { feeLevels, chartColors } from '../../app.constants'; -import { MempoolGraphComponent } from '../mempool-graph/mempool-graph.component'; -import { IncomingTransactionsGraphComponent } from '../incoming-transactions-graph/incoming-transactions-graph.component'; +import { StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { StorageService } from '@app/services/storage.service'; +import { feeLevels, chartColors } from '@app/app.constants'; +import { MempoolGraphComponent } from '@components/mempool-graph/mempool-graph.component'; +import { IncomingTransactionsGraphComponent } from '@components/incoming-transactions-graph/incoming-transactions-graph.component'; @Component({ selector: 'app-statistics', diff --git a/frontend/src/app/components/status-view/status-view.component.ts b/frontend/src/app/components/status-view/status-view.component.ts index 46e2347c7..4a9a75fec 100644 --- a/frontend/src/app/components/status-view/status-view.component.ts +++ b/frontend/src/app/components/status-view/status-view.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { WebsocketService } from '../../services/websocket.service'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-status-view', diff --git a/frontend/src/app/components/svg-images/svg-images.component.html b/frontend/src/app/components/svg-images/svg-images.component.html index 48e13de67..34ed23bd0 100644 --- a/frontend/src/app/components/svg-images/svg-images.component.html +++ b/frontend/src/app/components/svg-images/svg-images.component.html @@ -93,7 +93,7 @@ - + Mempool Accelerator™ @@ -113,6 +113,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/app/components/television/television.component.ts b/frontend/src/app/components/television/television.component.ts index 40f4b7192..1507f3d97 100644 --- a/frontend/src/app/components/television/television.component.ts +++ b/frontend/src/app/components/television/television.component.ts @@ -1,9 +1,9 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; -import { WebsocketService } from '../../services/websocket.service'; -import { OptimizedMempoolStats } from '../../interfaces/node-api.interface'; -import { StateService } from '../../services/state.service'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { OptimizedMempoolStats } from '@interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { ActivatedRoute } from '@angular/router'; import { map, scan, startWith, switchMap, tap } from 'rxjs/operators'; import { interval, merge, Observable, Subscription } from 'rxjs'; diff --git a/frontend/src/app/components/terms-of-service/terms-of-service.component.ts b/frontend/src/app/components/terms-of-service/terms-of-service.component.ts index 71a86c759..5eb90c0d9 100644 --- a/frontend/src/app/components/terms-of-service/terms-of-service.component.ts +++ b/frontend/src/app/components/terms-of-service/terms-of-service.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; -import { Env, StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; +import { Env, StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; @Component({ selector: 'app-terms-of-service', diff --git a/frontend/src/app/components/terms-of-service/terms-of-service.module.ts b/frontend/src/app/components/terms-of-service/terms-of-service.module.ts index 2ab139d8b..8a758b8de 100644 --- a/frontend/src/app/components/terms-of-service/terms-of-service.module.ts +++ b/frontend/src/app/components/terms-of-service/terms-of-service.module.ts @@ -1,8 +1,8 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { TermsOfServiceComponent } from './terms-of-service.component'; -import { SharedModule } from '../../shared/shared.module'; +import { TermsOfServiceComponent } from '@components/terms-of-service/terms-of-service.component'; +import { SharedModule } from '@app/shared/shared.module'; const routes: Routes = [ { diff --git a/frontend/src/app/components/test-transactions/test-transactions.component.html b/frontend/src/app/components/test-transactions/test-transactions.component.html index 20ba5c4bd..181db8b01 100644 --- a/frontend/src/app/components/test-transactions/test-transactions.component.html +++ b/frontend/src/app/components/test-transactions/test-transactions.component.html @@ -1,5 +1,8 @@
-

Test Transactions

+
+

Test Transactions

+ +
diff --git a/frontend/src/app/components/test-transactions/test-transactions.component.ts b/frontend/src/app/components/test-transactions/test-transactions.component.ts index c9abeed62..22a0951ea 100644 --- a/frontend/src/app/components/test-transactions/test-transactions.component.ts +++ b/frontend/src/app/components/test-transactions/test-transactions.component.ts @@ -1,10 +1,10 @@ import { Component, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { TestMempoolAcceptResult } from '../../interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { TestMempoolAcceptResult } from '@interfaces/node-api.interface'; @Component({ selector: 'app-test-transactions', @@ -74,7 +74,7 @@ export class TestTransactionsComponent implements OnInit { }, (error) => { if (typeof error.error === 'string') { - const matchText = error.error.match('"message":"(.*?)"'); + const matchText = error.error.replace(/\\/g, '').match('"message":"(.*?)"'); this.error = matchText && matchText[1] || error.error; } else if (error.message) { this.error = error.message; diff --git a/frontend/src/app/components/theme-selector/theme-selector.component.ts b/frontend/src/app/components/theme-selector/theme-selector.component.ts index be207910c..ca9c5788d 100644 --- a/frontend/src/app/components/theme-selector/theme-selector.component.ts +++ b/frontend/src/app/components/theme-selector/theme-selector.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { ThemeService } from '../../services/theme.service'; +import { ThemeService } from '@app/services/theme.service'; import { Subscription } from 'rxjs'; @Component({ diff --git a/frontend/src/app/components/time/time.component.ts b/frontend/src/app/components/time/time.component.ts index 3015007b2..9ae893d74 100644 --- a/frontend/src/app/components/time/time.component.ts +++ b/frontend/src/app/components/time/time.component.ts @@ -1,7 +1,6 @@ import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, Input, ChangeDetectorRef, OnChanges } from '@angular/core'; -import { StateService } from '../../services/state.service'; -import { dates } from '../../shared/i18n/dates'; -import { DatePipe } from '@angular/common'; +import { StateService } from '@app/services/state.service'; +import { TimeService } from '@app/services/time.service'; @Component({ selector: 'app-time', @@ -12,19 +11,9 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { interval: number; text: string; tooltip: string; - precisionThresholds = { - year: 100, - month: 18, - week: 12, - day: 31, - hour: 48, - minute: 90, - second: 90 - }; - intervals = {}; @Input() time: number; - @Input() dateString: number; + @Input() dateString: string; @Input() kind: 'plain' | 'since' | 'until' | 'span' | 'before' | 'within' = 'plain'; @Input() fastRender = false; @Input() fixedRender = false; @@ -40,37 +29,26 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { constructor( private ref: ChangeDetectorRef, private stateService: StateService, - private datePipe: DatePipe, - ) { - this.intervals = { - year: 31536000, - month: 2592000, - week: 604800, - day: 86400, - hour: 3600, - minute: 60, - second: 1 - }; - } + private timeService: TimeService, + ) {} ngOnInit() { + this.calculateTime(); if(this.fixedRender){ - this.text = this.calculate(); return; } if (!this.stateService.isBrowser) { - this.text = this.calculate(); this.ref.markForCheck(); return; } this.interval = window.setInterval(() => { - this.text = this.calculate(); + this.calculateTime(); this.ref.markForCheck(); }, 1000 * (this.fastRender ? 1 : 60)); } ngOnChanges() { - this.text = this.calculate(); + this.calculateTime(); this.ref.markForCheck(); } @@ -78,224 +56,21 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { clearInterval(this.interval); } - calculate() { - if (this.time == null) { - return; - } - - let seconds: number; - switch (this.kind) { - case 'since': - seconds = Math.floor((+new Date() - +new Date(this.dateString || this.time * 1000)) / 1000); - this.tooltip = this.datePipe.transform(new Date(this.dateString || this.time * 1000), 'yyyy-MM-dd HH:mm'); - break; - case 'until': - case 'within': - seconds = (+new Date(this.time) - +new Date()) / 1000; - this.tooltip = this.datePipe.transform(new Date(this.time), 'yyyy-MM-dd HH:mm'); - break; - default: - seconds = Math.floor(this.time); - this.tooltip = ''; - } - - if (!this.showTooltip || this.relative) { - this.tooltip = ''; - } - - if (seconds < 1 && this.kind === 'span') { - return $localize`:@@date-base.immediately:Immediately`; - } else if (seconds < 60) { - if (this.relative || this.kind === 'since') { - if (this.lowercaseStart) { - return $localize`:@@date-base.just-now:Just now`.charAt(0).toLowerCase() + $localize`:@@date-base.just-now:Just now`.slice(1); - } - return $localize`:@@date-base.just-now:Just now`; - } else if (this.kind === 'until' || this.kind === 'within') { - seconds = 60; - } - } - - let counter: number; - const result = []; - let usedUnits = 0; - for (const [index, unit] of this.units.entries()) { - let precisionUnit = this.units[Math.min(this.units.length - 1, index + this.precision)]; - counter = Math.floor(seconds / this.intervals[unit]); - const precisionCounter = Math.round(seconds / this.intervals[precisionUnit]); - if (precisionCounter > this.precisionThresholds[precisionUnit]) { - precisionUnit = unit; - } - if (this.units.indexOf(precisionUnit) === this.units.indexOf(this.minUnit)) { - counter = Math.max(1, counter); - } - if (counter > 0) { - let rounded; - const roundFactor = Math.pow(10,this.fractionDigits || 0); - if ((this.kind === 'until' || this.kind === 'within') && usedUnits < this.numUnits) { - rounded = Math.floor((seconds / this.intervals[precisionUnit]) * roundFactor) / roundFactor; - } else { - rounded = Math.round((seconds / this.intervals[precisionUnit]) * roundFactor) / roundFactor; - } - if ((this.kind !== 'until' && this.kind !== 'within')|| this.numUnits === 1) { - return this.formatTime(this.kind, precisionUnit, rounded); - } else { - if (!usedUnits) { - result.push(this.formatTime(this.kind, precisionUnit, rounded)); - } else { - result.push(this.formatTime('', precisionUnit, rounded)); - } - seconds -= (rounded * this.intervals[precisionUnit]); - usedUnits++; - if (usedUnits >= this.numUnits) { - return result.join(', '); - } - } - } - } - return result.join(', '); - } - - private formatTime(kind, unit, number): string { - const dateStrings = dates(number); - switch (kind) { - case 'since': - if (number === 1) { - switch (unit) { // singular (1 day) - case 'year': return $localize`:@@time-since:${dateStrings.i18nYear}:DATE: ago`; break; - case 'month': return $localize`:@@time-since:${dateStrings.i18nMonth}:DATE: ago`; break; - case 'week': return $localize`:@@time-since:${dateStrings.i18nWeek}:DATE: ago`; break; - case 'day': return $localize`:@@time-since:${dateStrings.i18nDay}:DATE: ago`; break; - case 'hour': return $localize`:@@time-since:${dateStrings.i18nHour}:DATE: ago`; break; - case 'minute': return $localize`:@@time-since:${dateStrings.i18nMinute}:DATE: ago`; break; - case 'second': return $localize`:@@time-since:${dateStrings.i18nSecond}:DATE: ago`; break; - } - } else { - switch (unit) { // plural (2 days) - case 'year': return $localize`:@@time-since:${dateStrings.i18nYears}:DATE: ago`; break; - case 'month': return $localize`:@@time-since:${dateStrings.i18nMonths}:DATE: ago`; break; - case 'week': return $localize`:@@time-since:${dateStrings.i18nWeeks}:DATE: ago`; break; - case 'day': return $localize`:@@time-since:${dateStrings.i18nDays}:DATE: ago`; break; - case 'hour': return $localize`:@@time-since:${dateStrings.i18nHours}:DATE: ago`; break; - case 'minute': return $localize`:@@time-since:${dateStrings.i18nMinutes}:DATE: ago`; break; - case 'second': return $localize`:@@time-since:${dateStrings.i18nSeconds}:DATE: ago`; break; - } - } - break; - case 'until': - if (number === 1) { - switch (unit) { // singular (In ~1 day) - case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYear}:DATE:`; break; - case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonth}:DATE:`; break; - case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeek}:DATE:`; break; - case 'day': return $localize`:@@time-until:In ~${dateStrings.i18nDay}:DATE:`; break; - case 'hour': return $localize`:@@time-until:In ~${dateStrings.i18nHour}:DATE:`; break; - case 'minute': return $localize`:@@time-until:In ~${dateStrings.i18nMinute}:DATE:`; - case 'second': return $localize`:@@time-until:In ~${dateStrings.i18nSecond}:DATE:`; - } - } else { - switch (unit) { // plural (In ~2 days) - case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYears}:DATE:`; break; - case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonths}:DATE:`; break; - case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeeks}:DATE:`; break; - case 'day': return $localize`:@@time-until:In ~${dateStrings.i18nDays}:DATE:`; break; - case 'hour': return $localize`:@@time-until:In ~${dateStrings.i18nHours}:DATE:`; break; - case 'minute': return $localize`:@@time-until:In ~${dateStrings.i18nMinutes}:DATE:`; break; - case 'second': return $localize`:@@time-until:In ~${dateStrings.i18nSeconds}:DATE:`; break; - } - } - break; - case 'within': - if (number === 1) { - switch (unit) { // singular (In ~1 day) - case 'year': return $localize`:@@time-within:within ~${dateStrings.i18nYear}:DATE:`; break; - case 'month': return $localize`:@@time-within:within ~${dateStrings.i18nMonth}:DATE:`; break; - case 'week': return $localize`:@@time-within:within ~${dateStrings.i18nWeek}:DATE:`; break; - case 'day': return $localize`:@@time-within:within ~${dateStrings.i18nDay}:DATE:`; break; - case 'hour': return $localize`:@@time-within:within ~${dateStrings.i18nHour}:DATE:`; break; - case 'minute': return $localize`:@@time-within:within ~${dateStrings.i18nMinute}:DATE:`; - case 'second': return $localize`:@@time-within:within ~${dateStrings.i18nSecond}:DATE:`; - } - } else { - switch (unit) { // plural (In ~2 days) - case 'year': return $localize`:@@time-within:within ~${dateStrings.i18nYears}:DATE:`; break; - case 'month': return $localize`:@@time-within:within ~${dateStrings.i18nMonths}:DATE:`; break; - case 'week': return $localize`:@@time-within:within ~${dateStrings.i18nWeeks}:DATE:`; break; - case 'day': return $localize`:@@time-within:within ~${dateStrings.i18nDays}:DATE:`; break; - case 'hour': return $localize`:@@time-within:within ~${dateStrings.i18nHours}:DATE:`; break; - case 'minute': return $localize`:@@time-within:within ~${dateStrings.i18nMinutes}:DATE:`; break; - case 'second': return $localize`:@@time-within:within ~${dateStrings.i18nSeconds}:DATE:`; break; - } - } - break; - case 'span': - if (number === 1) { - switch (unit) { // singular (1 day) - case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYear}:DATE:`; break; - case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonth}:DATE:`; break; - case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeek}:DATE:`; break; - case 'day': return $localize`:@@time-span:After ${dateStrings.i18nDay}:DATE:`; break; - case 'hour': return $localize`:@@time-span:After ${dateStrings.i18nHour}:DATE:`; break; - case 'minute': return $localize`:@@time-span:After ${dateStrings.i18nMinute}:DATE:`; break; - case 'second': return $localize`:@@time-span:After ${dateStrings.i18nSecond}:DATE:`; break; - } - } else { - switch (unit) { // plural (2 days) - case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYears}:DATE:`; break; - case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonths}:DATE:`; break; - case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeeks}:DATE:`; break; - case 'day': return $localize`:@@time-span:After ${dateStrings.i18nDays}:DATE:`; break; - case 'hour': return $localize`:@@time-span:After ${dateStrings.i18nHours}:DATE:`; break; - case 'minute': return $localize`:@@time-span:After ${dateStrings.i18nMinutes}:DATE:`; break; - case 'second': return $localize`:@@time-span:After ${dateStrings.i18nSeconds}:DATE:`; break; - } - } - break; - case 'before': - if (number === 1) { - switch (unit) { // singular (1 day) - case 'year': return $localize`:@@time-before:${dateStrings.i18nYear}:DATE: before`; break; - case 'month': return $localize`:@@time-before:${dateStrings.i18nMonth}:DATE: before`; break; - case 'week': return $localize`:@@time-before:${dateStrings.i18nWeek}:DATE: before`; break; - case 'day': return $localize`:@@time-before:${dateStrings.i18nDay}:DATE: before`; break; - case 'hour': return $localize`:@@time-before:${dateStrings.i18nHour}:DATE: before`; break; - case 'minute': return $localize`:@@time-before:${dateStrings.i18nMinute}:DATE: before`; break; - case 'second': return $localize`:@@time-before:${dateStrings.i18nSecond}:DATE: before`; break; - } - } else { - switch (unit) { // plural (2 days) - case 'year': return $localize`:@@time-before:${dateStrings.i18nYears}:DATE: before`; break; - case 'month': return $localize`:@@time-before:${dateStrings.i18nMonths}:DATE: before`; break; - case 'week': return $localize`:@@time-before:${dateStrings.i18nWeeks}:DATE: before`; break; - case 'day': return $localize`:@@time-before:${dateStrings.i18nDays}:DATE: before`; break; - case 'hour': return $localize`:@@time-before:${dateStrings.i18nHours}:DATE: before`; break; - case 'minute': return $localize`:@@time-before:${dateStrings.i18nMinutes}:DATE: before`; break; - case 'second': return $localize`:@@time-before:${dateStrings.i18nSeconds}:DATE: before`; break; - } - } - break; - default: - if (number === 1) { - switch (unit) { // singular (1 day) - case 'year': return dateStrings.i18nYear; break; - case 'month': return dateStrings.i18nMonth; break; - case 'week': return dateStrings.i18nWeek; break; - case 'day': return dateStrings.i18nDay; break; - case 'hour': return dateStrings.i18nHour; break; - case 'minute': return dateStrings.i18nMinute; break; - case 'second': return dateStrings.i18nSecond; break; - } - } else { - switch (unit) { // plural (2 days) - case 'year': return dateStrings.i18nYears; break; - case 'month': return dateStrings.i18nMonths; break; - case 'week': return dateStrings.i18nWeeks; break; - case 'day': return dateStrings.i18nDays; break; - case 'hour': return dateStrings.i18nHours; break; - case 'minute': return dateStrings.i18nMinutes; break; - case 'second': return dateStrings.i18nSeconds; break; - } - } - } + calculateTime(): void { + const { text, tooltip } = this.timeService.calculate( + this.time, + this.kind, + this.relative, + this.precision, + this.minUnit, + this.showTooltip, + this.units, + this.dateString, + this.lowercaseStart, + this.numUnits, + this.fractionDigits, + ); + this.text = text; + this.tooltip = tooltip; } } diff --git a/frontend/src/app/components/tracker/tracker.component.html b/frontend/src/app/components/tracker/tracker.component.html index d92838fc5..2d9bd4982 100644 --- a/frontend/src/app/components/tracker/tracker.component.html +++ b/frontend/src/app/components/tracker/tracker.component.html @@ -42,11 +42,11 @@
-
+
@if (replaced) { } @else {
@@ -61,27 +61,29 @@ @if (transactionTime > 0) { } @else { - + }
-
-
ETA
-
- - - @if (eta.blocks >= 7) { - Not any time soon - } @else { - - } - - - - - -
-
+ @if (!replaced) { +
+
ETA
+
+ + + @if (eta.blocks >= 7) { + Not any time soon + } @else { + + } + + + + + +
+
+ } } @else if (tx && tx.status?.confirmed) {
Confirmed at
@@ -111,14 +113,14 @@
-
+
@if (isLoading) {
  } @else { - @if (!tx.status?.confirmed && showAccelerationSummary) { + @if (tx && !tx.status?.confirmed && showAccelerationSummary) { } -
+
@if (tx?.acceleration && !tx.status?.confirmed) {
@@ -184,8 +186,18 @@
}
+ +
+ + Error loading transaction data. + +
- diff --git a/frontend/src/app/components/tracker/tracker.component.scss b/frontend/src/app/components/tracker/tracker.component.scss index 56f0b5f0a..614691426 100644 --- a/frontend/src/app/components/tracker/tracker.component.scss +++ b/frontend/src/app/components/tracker/tracker.component.scss @@ -49,7 +49,7 @@ position: relative; background: var(--nav-bg); box-shadow: 0 -5px 15px #000; - z-index: 100; + z-index: 99; align-items: center; justify-content: space-between; diff --git a/frontend/src/app/components/tracker/tracker.component.ts b/frontend/src/app/components/tracker/tracker.component.ts index 4ba00c189..5ee27771d 100644 --- a/frontend/src/app/components/tracker/tracker.component.ts +++ b/frontend/src/app/components/tracker/tracker.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, OnDestroy, HostListener, Inject, ChangeDetectorRef, ChangeDetectionStrategy, NgZone } from '@angular/core'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; import { switchMap, @@ -12,25 +12,27 @@ import { map, startWith } from 'rxjs/operators'; -import { Transaction } from '../../interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; import { of, merge, Subscription, Observable, Subject, throwError, combineLatest, BehaviorSubject } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { CacheService } from '../../services/cache.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { AudioService } from '../../services/audio.service'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { Filter, TransactionFlags } from '../../shared/filters.utils'; -import { BlockExtended, CpfpInfo, RbfTree, MempoolPosition, DifficultyAdjustment, Acceleration, AccelerationPosition } from '../../interfaces/node-api.interface'; -import { PriceService } from '../../services/price.service'; -import { ServicesApiServices } from '../../services/services-api.service'; -import { EnterpriseService } from '../../services/enterprise.service'; -import { ZONE_SERVICE } from '../../injection-tokens'; -import { TrackerStage } from './tracker-bar.component'; -import { MiningService, MiningStats } from '../../services/mining.service'; -import { ETA, EtaService } from '../../services/eta.service'; -import { getTransactionFlags, getUnacceleratedFeeRate } from '../../shared/transaction.utils'; +import { StateService } from '@app/services/state.service'; +import { CacheService } from '@app/services/cache.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { AudioService } from '@app/services/audio.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { Filter, TransactionFlags } from '@app/shared/filters.utils'; +import { BlockExtended, CpfpInfo, RbfTree, MempoolPosition, DifficultyAdjustment, Acceleration, AccelerationPosition } from '@interfaces/node-api.interface'; +import { PriceService } from '@app/services/price.service'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; +import { ZONE_SERVICE } from '@app/injection-tokens'; +import { TrackerStage } from '@components/tracker/tracker-bar.component'; +import { MiningService, MiningStats } from '@app/services/mining.service'; +import { ETA, EtaService } from '@app/services/eta.service'; +import { getTransactionFlags, getUnacceleratedFeeRate } from '@app/shared/transaction.utils'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; + interface Pool { id: number; @@ -140,6 +142,7 @@ export class TrackerComponent implements OnInit, OnDestroy { private priceService: PriceService, private enterpriseService: EnterpriseService, private miningService: MiningService, + private router: Router, private cd: ChangeDetectorRef, private zone: NgZone, @Inject(ZONE_SERVICE) private zoneService: any, @@ -283,14 +286,14 @@ export class TrackerComponent implements OnInit, OnDestroy { this.accelerationInfo = null; }), switchMap((blockHash: string) => { - return this.servicesApiService.getAccelerationHistory$({ blockHash }); + return this.servicesApiService.getAllAccelerationHistory$({ blockHash }, null, this.txId); }), catchError(() => { return of(null); }) ).subscribe((accelerationHistory) => { for (const acceleration of accelerationHistory) { - if (acceleration.txid === this.txId && (acceleration.status === 'completed' || acceleration.status === 'completed_provisional')) { + if (acceleration.txid === this.txId && (acceleration.status === 'completed' || acceleration.status === 'completed_provisional') && acceleration.pools.includes(acceleration.minedByPoolUniqueId)) { const boostCost = acceleration.boostCost || acceleration.bidBoost; acceleration.acceleratedFeeRate = Math.max(acceleration.effectiveFee, acceleration.effectiveFee + boostCost) / acceleration.effectiveVsize; acceleration.boost = boostCost; @@ -744,7 +747,7 @@ export class TrackerComponent implements OnInit, OnDestroy { checkAccelerationEligibility() { if (this.tx) { - this.tx.flags = getTransactionFlags(this.tx); + this.tx.flags = getTransactionFlags(this.tx, null, null, this.tx.status?.block_time, this.stateService.network); const replaceableInputs = (this.tx.flags & (TransactionFlags.sighash_none | TransactionFlags.sighash_acp)) > 0n; const highSigop = (this.tx.sigops * 20) > this.tx.weight; this.eligibleForAcceleration = !replaceableInputs && !highSigop; diff --git a/frontend/src/app/components/tracker/tracker.module.ts b/frontend/src/app/components/tracker/tracker.module.ts index 799b8cd65..b41a68bc5 100644 --- a/frontend/src/app/components/tracker/tracker.module.ts +++ b/frontend/src/app/components/tracker/tracker.module.ts @@ -1,12 +1,12 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { SharedModule } from '../../shared/shared.module'; -import { TxBowtieModule } from '../tx-bowtie-graph/tx-bowtie.module'; -import { GraphsModule } from '../../graphs/graphs.module'; -import { TrackerComponent } from '../tracker/tracker.component'; -import { TrackerBarComponent } from '../tracker/tracker-bar.component'; -import { TransactionModule } from '../transaction/transaction.module'; +import { SharedModule } from '@app/shared/shared.module'; +import { TxBowtieModule } from '@components/tx-bowtie-graph/tx-bowtie.module'; +import { GraphsModule } from '@app/graphs/graphs.module'; +import { TrackerComponent } from '@components/tracker/tracker.component'; +import { TrackerBarComponent } from '@components/tracker/tracker-bar.component'; +import { TransactionModule } from '@components/transaction/transaction.module'; const routes: Routes = [ { diff --git a/frontend/src/app/components/trademark-policy/trademark-policy.component.html b/frontend/src/app/components/trademark-policy/trademark-policy.component.html index de1d78daa..e12cbb8b2 100644 --- a/frontend/src/app/components/trademark-policy/trademark-policy.component.html +++ b/frontend/src/app/components/trademark-policy/trademark-policy.component.html @@ -8,7 +8,7 @@

Trademark Policy and Guidelines

The Mempool Open Source Project ®
-
Updated: July 3, 2024
+
Updated: August 19, 2024

@@ -95,16 +95,31 @@

The mempool Square Logo



- +

The Mempool Accelerator Logo



+ +

+

The mempool research Logo

+

+

The Mempool Goggles Logo



+ +

+

The mempool transaction Logo

+

+ + +

+

The mempool block visualization Logo

+

+

The mempool Blocks Logo

diff --git a/frontend/src/app/components/trademark-policy/trademark-policy.component.ts b/frontend/src/app/components/trademark-policy/trademark-policy.component.ts index ad8b6b372..d27848c55 100644 --- a/frontend/src/app/components/trademark-policy/trademark-policy.component.ts +++ b/frontend/src/app/components/trademark-policy/trademark-policy.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; -import { Env, StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; +import { Env, StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; @Component({ selector: 'app-trademark-policy', diff --git a/frontend/src/app/components/trademark-policy/trademark-policy.module.ts b/frontend/src/app/components/trademark-policy/trademark-policy.module.ts index 24f70be52..eaf57a5a2 100644 --- a/frontend/src/app/components/trademark-policy/trademark-policy.module.ts +++ b/frontend/src/app/components/trademark-policy/trademark-policy.module.ts @@ -1,8 +1,8 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { TrademarkPolicyComponent } from './trademark-policy.component'; -import { SharedModule } from '../../shared/shared.module'; +import { TrademarkPolicyComponent } from '@components/trademark-policy/trademark-policy.component'; +import { SharedModule } from '@app/shared/shared.module'; const routes: Routes = [ { diff --git a/frontend/src/app/components/transaction/liquid-ublinding.ts b/frontend/src/app/components/transaction/liquid-ublinding.ts index a53edeb4c..259b06a0b 100644 --- a/frontend/src/app/components/transaction/liquid-ublinding.ts +++ b/frontend/src/app/components/transaction/liquid-ublinding.ts @@ -1,4 +1,4 @@ -import { Transaction } from '../../interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; // Parse the blinders data from a string encoded as a comma separated list, in the following format: // ,,, @@ -34,7 +34,7 @@ export class LiquidUnblinding { } async makeCommitmentMap(blinders: any) { - const libwally = await import('./libwally.js'); + const libwally = await import('@components/transaction/libwally.js'); await libwally.load(); const commitments = new Map(); blinders.forEach(b => { @@ -140,4 +140,4 @@ export class LiquidUnblinding { } return tx; } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/transaction/transaction-details/transaction-details.component.html b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.html new file mode 100644 index 000000000..0bfcb494e --- /dev/null +++ b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.html @@ -0,0 +1,324 @@ +
+
+ @if (isMobile) { +
+ + + + + +
+
+ } @else { +
+ + + + +
+
+
+ + + + +
+
+ } +
+
+ + + @if (tx?.status?.confirmed) { + + + } @else { + + + } + + @if (tx?.status?.confirmed) { + + } + + + + + + + @if (!isLoadingTx && !tx?.status?.confirmed && isAcceleration && ((cpfpInfo && hasEffectiveFeeRate) || accelerationInfo)) { + + } @else { + + } + @if (tx?.status?.confirmed) { + + } + + + + @if (!isLoadingTx) { + + Timestamp + + ‎{{ tx.status.block_time * 1000 | date:'yyyy-MM-dd HH:mm:ss' }} +
+ () +
+ + + } @else { + + } +
+ + + @if (!isLoadingTx) { + @if (transactionTime > 0) { + + Confirmed + + + } + } @else { + + } + + + + @if (isLoadingTx) { + + } @else if (transactionTime > 0) { + + First seen + + + } @else if (isLoadingFirstSeen) { + + First seen + + + } + + + + @if (network !== 'liquid' && network !== 'liquidtestnet') { + @if (!isLoadingTx) { + @if (featuresEnabled) { + + Features + + + + + } + } @else { + + } + } + + + + @if (network === '') { + @if (!isLoadingTx) { + @if (auditStatus) { + + Audit + + + @if (auditStatus.coinbase) { + Coinbase + } @else if (auditStatus.expected) { + Expected in Block + } @else if (auditStatus.seen) { + Seen in Mempool + } @else if (!auditStatus.conflict) { + Not seen in Mempool + } + @if (auditStatus.added) { + Added + } + @if (auditStatus.prioritized) { + Prioritized + } + @if (auditStatus.conflict) { + Conflict + } + + + + } + } @else { + + } + } + + + + @if (!isLoadingTx) { + @if (!replaced && !isCached) { + + ETA + + + @if (network === 'liquid' || network === 'liquidtestnet') { + + } @else { + + @if (eta.blocks >= 7) { + Not any time soon + } @else { + + } + @if (!tx?.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !showAccelerationSummary && notAcceleratedOnLoad) { + + } + + } + + + + + + + } + } @else { + + } + + + + @if (!isLoadingTx) { + @if (isAcceleration || filters.length) { + + + + + + @if (isAcceleration) { + Accelerated + } + + {{ filter.label }} + + + + } + } + + + + @if (!isLoadingTx) { + + Fee + {{ tx.fee | number }} sats + @if (isAcceleration && accelerationInfo?.bidBoost ?? tx.feeDelta > 0) { + +{{ accelerationInfo?.bidBoost ?? tx.feeDelta | number }} sats + } + + + + } @else { + + } + + + + @if (!isLoadingTx) { + + Fee rate + + + @if (tx?.status?.confirmed && tx.fee && !hasEffectiveFeeRate && !accelerationInfo) { +   + + } + + + } @else { + + } + + + + @if (!isLoadingTx) { + @if ((cpfpInfo && hasEffectiveFeeRate) || (accelerationInfo && isAcceleration)) { + + @if (isAcceleration) { + Accelerated fee rate + } @else { + Effective fee rate + } + +
+ @if (accelerationInfo?.acceleratedFeeRate && (!tx.effectiveFeePerVsize || accelerationInfo.acceleratedFeeRate >= tx.effectiveFeePerVsize || tx.acceleration)) { + + } @else { + + } + + @if (tx?.status?.confirmed && !tx.acceleration && !accelerationInfo && tx.fee && tx.effectiveFeePerVsize) { + + } +
+ @if (hasCpfp) { + + } + + + } + } @else { + + } +
+ + + + + + + + + + + + @if (network === '') { + @if (!isLoadingTx) { + + Miner + @if (pool) { + + + + @if (pool.minerNames[1].length > 16) { + {{ pool.minerNames[1].slice(0, 15) }}… + } @else { + {{ pool.minerNames[1] }} + } + + + {{ pool.name }} + + + } @else { + + + + } + + } @else { + + } + } + + + + + + + \ No newline at end of file diff --git a/frontend/src/app/components/transaction/transaction-details/transaction-details.component.scss b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.scss new file mode 100644 index 000000000..9bb32ba4a --- /dev/null +++ b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.scss @@ -0,0 +1,183 @@ +.title-block { + flex-wrap: wrap; + align-items: baseline; + @media (min-width: 650px) { + flex-direction: row; + } + h1 { + margin: 0rem; + margin-right: 15px; + line-height: 1; + } +} + +.td-width { + width: 150px; + + @media (max-width: 768px) { + width: 175px; + } +} + +.badge { + position: relative; + top: -1px; +} + +.miner-name { + margin-right: 4px; + vertical-align: top; +} + +.pool-logo { + width: 25px; + height: 25px; + position: relative; + top: -1px; + margin-right: 2px; +} + +.badge.badge-accelerated { + background-color: var(--tertiary); + color: white; +} + +.btn-small-height { + line-height: 1; +} + +.row{ + flex-direction: column; + @media (min-width: 850px) { + flex-direction: row; + } +} + +.box.hidden { + visibility: hidden; + height: 0px; + padding-top: 0px; + padding-bottom: 0px; + margin-top: 0px; + margin-bottom: 0px; +} + +@media (max-width: 767.98px) { + .mobile-bottomcol { + margin-top: 15px; + } + + .details-table td:first-child { + white-space: pre-wrap; + } +} + +.fiat { + display: block; + @media (min-width: 768px){ + display: inline-block; + margin-left: 15px; + text-align: left; + } +} + +.table { + tr td { + padding: 0.75rem 0.5rem; + @media (min-width: 576px) { + padding: 0.75rem 0.75rem; + } + &:last-child { + text-align: right; + @media (min-width: 850px) { + text-align: left; + } + } + .btn { + display: block; + } + + &.wrap-cell { + white-space: normal; + } + } +} + +.effective-fee-container { + display: block; + @media (min-width: 768px){ + display: inline-block; + } + @media (max-width: 425px){ + display: flex; + flex-direction: column; + } +} + +@media (max-width: 767px){ + .hide-on-mobile { + display: none; + } +} + +.effective-fee-rating { + @media (max-width: 767px){ + margin-right: 0px !important; + } +} + +.btn-outline-info { + margin-top: 5px; + @media (min-width: 768px){ + margin-top: 0px; + } +} + +.eta { + display: flex; + flex-wrap: wrap; + align-content: center; + @media (min-width: 850px) { + justify-content: left !important; + } +} + +.accelerate { + @media (min-width: 850px) { + margin-left: auto; + } +} + +.etaDeepMempool { + flex-wrap: wrap; + @media (max-width: 849px) { + justify-content: right !important; + } +} + +.accelerateDeepMempool { + background-color: var(--tertiary); + margin-left: 5px; +} + +.goggles-icon { + display: block; + width: 2.7em; +} + +.pool-logo { + width: 15px; + height: 15px; + position: relative; + top: -1px; + margin-right: 2px; +} + +.oobFees { + color: #905cf4; +} + +.disabled { + opacity: 0.5; + pointer-events: none; +} diff --git a/frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts new file mode 100644 index 000000000..2b539c154 --- /dev/null +++ b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts @@ -0,0 +1,56 @@ +import { Component, OnInit, Input, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core'; +import { Transaction } from '@interfaces/electrs.interface'; +import { Acceleration, CpfpInfo } from '@interfaces/node-api.interface'; +import { Pool, TxAuditStatus } from '@components/transaction/transaction.component'; +import { Observable } from 'rxjs'; +import { ETA } from '@app/services/eta.service'; +import { MiningStats } from '@app/services/mining.service'; +import { Filter } from '@app/shared/filters.utils'; + +@Component({ + selector: 'app-transaction-details', + templateUrl: './transaction-details.component.html', + styleUrls: ['./transaction-details.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class TransactionDetailsComponent implements OnInit { + @Input() network: string; + @Input() tx: Transaction; + @Input() isLoadingTx: boolean; + @Input() isMobile: boolean; + @Input() transactionTime: number; + @Input() isLoadingFirstSeen: boolean; + @Input() featuresEnabled: boolean; + @Input() auditStatus: TxAuditStatus; + @Input() filters: Filter[]; + @Input() miningStats: MiningStats; + @Input() pool: Pool | null; + @Input() isAcceleration: boolean; + @Input() hasEffectiveFeeRate: boolean; + @Input() cpfpInfo: CpfpInfo; + @Input() hasCpfp: boolean; + @Input() accelerationInfo: Acceleration; + @Input() acceleratorAvailable: boolean; + @Input() accelerateCtaType: string; + @Input() notAcceleratedOnLoad: boolean; + @Input() showAccelerationSummary: boolean; + @Input() eligibleForAcceleration: boolean; + @Input() replaced: boolean; + @Input() isCached: boolean; + @Input() ETA$: Observable; + + @Output() accelerateClicked = new EventEmitter(); + @Output() toggleCpfp$ = new EventEmitter(); + + constructor() {} + + ngOnInit(): void {} + + onAccelerateClicked(): void { + this.accelerateClicked.emit(true); + } + + toggleCpfp(): void { + this.toggleCpfp$.emit(); + } +} diff --git a/frontend/src/app/components/transaction/transaction-extras.module.ts b/frontend/src/app/components/transaction/transaction-extras.module.ts new file mode 100644 index 000000000..ddfff51a5 --- /dev/null +++ b/frontend/src/app/components/transaction/transaction-extras.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; + +@NgModule({ + declarations: [ + ], + imports: [ + ], + exports: [ + ] +}) +export class TransactionExtrasModule { } diff --git a/frontend/src/app/components/transaction/transaction-preview.component.html b/frontend/src/app/components/transaction/transaction-preview.component.html index 63a11a8f0..066e0d442 100644 --- a/frontend/src/app/components/transaction/transaction-preview.component.html +++ b/frontend/src/app/components/transaction/transaction-preview.component.html @@ -21,7 +21,7 @@ ‎{{ transactionTime * 1000 | date:'yyyy-MM-dd HH:mm' }} - Fee {{ tx.fee | number }} sat + Fee {{ tx.fee | number }} sats
diff --git a/frontend/src/app/components/transaction/transaction-preview.component.ts b/frontend/src/app/components/transaction/transaction-preview.component.ts index 313442dbf..0c51e0064 100644 --- a/frontend/src/app/components/transaction/transaction-preview.component.ts +++ b/frontend/src/app/components/transaction/transaction-preview.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { switchMap, @@ -8,16 +8,16 @@ import { retryWhen, delay, } from 'rxjs/operators'; -import { Transaction, Vout } from '../../interfaces/electrs.interface'; +import { Transaction, Vout } from '@interfaces/electrs.interface'; import { of, merge, Subscription, Observable, Subject, from } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { CacheService } from '../../services/cache.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { CpfpInfo } from '../../interfaces/node-api.interface'; -import { LiquidUnblinding } from './liquid-ublinding'; +import { StateService } from '@app/services/state.service'; +import { CacheService } from '@app/services/cache.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { CpfpInfo } from '@interfaces/node-api.interface'; +import { LiquidUnblinding } from '@components/transaction/liquid-ublinding'; @Component({ selector: 'app-transaction-preview', diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index 9ce22d26c..8c2d9de01 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -31,43 +31,46 @@
@if (!error) { -
-
- @if (isMobile) { -
- - - - - -
-
- } @else { -
- - - - -
-
-
- - - - -
-
- } -
-
+ } + +
-

CPFP

+
+

Related Transactions

+
@@ -162,12 +165,12 @@
- +

Acceleration Timeline

- +
@@ -414,287 +417,4 @@ - - - - @if (tx?.status?.confirmed) { - - - } @else { - - - } - - @if (tx?.status?.confirmed) { - - } - - - - - - - @if (!isLoadingTx && !tx?.status?.confirmed && isAcceleration && ((cpfpInfo && hasEffectiveFeeRate) || accelerationInfo)) { - - } @else { - - } - @if (tx?.status?.confirmed) { - - } - - - - @if (!isLoadingTx) { -
- - - - } @else { - - } - - - - @if (!isLoadingTx) { - @if (transactionTime > 0) { - - - - - } - } @else { - - } - - - - @if (isLoadingTx) { - - } @else if (transactionTime > 0) { - - - - - } @else if (isLoadingFirstSeen) { - - - - - } - - - - @if (network !== 'liquid' && network !== 'liquidtestnet') { - @if (!isLoadingTx) { - @if (featuresEnabled) { - - - - - } - } @else { - - } - } - - - - @if (network === '') { - @if (!isLoadingTx) { - @if (auditStatus) { - - - - - } - } @else { - - } - } - - - - @if (!isLoadingTx) { - @if (!replaced && !isCached) { - - - - - } - } @else { - - } - - - - @if (!isLoadingTx) { - @if (isAcceleration || filters.length) { - - - - - } - } - - - - @if (!isLoadingTx) { - - - - - } @else { - - } - - - - @if (!isLoadingTx) { - - - - - } @else { - - } - - - - @if (!isLoadingTx) { - @if ((cpfpInfo && hasEffectiveFeeRate) || accelerationInfo) { - - @if (isAcceleration) { - - } @else { - - } - - - } - } @else { - - } - - - - - - - - - - - @if (network === '') { - @if (!isLoadingTx) { - - - @if (pool) { - - } @else { - - } - - } @else { - - } - } - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/app/components/transaction/transaction.component.scss b/frontend/src/app/components/transaction/transaction.component.scss index 7db417126..d35f26130 100644 --- a/frontend/src/app/components/transaction/transaction.component.scss +++ b/frontend/src/app/components/transaction/transaction.component.scss @@ -18,6 +18,7 @@ line-height: 1; } } + .tx-link { display: flex; flex-direction: row; @@ -65,10 +66,6 @@ color: white; } -.btn-small-height { - line-height: 1; -} - .arrow-green { color: var(--success); } @@ -81,7 +78,7 @@ margin-bottom: 40px; } -.row{ +.row { flex-direction: column; @media (min-width: 850px) { flex-direction: row; @@ -287,38 +284,21 @@ } .accelerate { - display: flex !important; - align-self: auto; - margin-left: auto; - background-color: var(--tertiary); - @media (max-width: 849px) { - margin-left: 5px; - } + @media (min-width: 850px) { + margin-left: auto; + } } .etaDeepMempool { - display: flex !important; - justify-content: flex-end; flex-wrap: wrap; - align-content: center; - @media (max-width: 995px) { - justify-content: left !important; - } @media (max-width: 849px) { justify-content: right !important; } } .accelerateDeepMempool { - align-self: auto; - margin-left: auto; background-color: var(--tertiary); - @media (max-width: 995px) { - margin-left: 0px; - } - @media (max-width: 849px) { - margin-left: 5px; - } + margin-left: 5px; } .goggles-icon { @@ -333,3 +313,12 @@ top: -1px; margin-right: 2px; } + +.oobFees { + color: #905cf4; +} + +.disabled { + opacity: 0.5; + pointer-events: none; +} diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index 924addaa0..71ffaa2cd 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, AfterViewInit, OnDestroy, HostListener, ViewChild, ElementRef, Inject, ChangeDetectorRef } from '@angular/core'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; import { switchMap, @@ -15,33 +15,34 @@ import { repeat, take } from 'rxjs/operators'; -import { Transaction } from '../../interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; import { of, merge, Subscription, Observable, Subject, from, throwError, combineLatest, BehaviorSubject } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { CacheService } from '../../services/cache.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { AudioService } from '../../services/audio.service'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { StorageService } from '../../services/storage.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { getTransactionFlags, getUnacceleratedFeeRate } from '../../shared/transaction.utils'; -import { Filter, TransactionFlags, toFilters } from '../../shared/filters.utils'; -import { BlockExtended, CpfpInfo, RbfTree, MempoolPosition, DifficultyAdjustment, Acceleration, AccelerationPosition } from '../../interfaces/node-api.interface'; -import { LiquidUnblinding } from './liquid-ublinding'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { PriceService } from '../../services/price.service'; -import { isFeatureActive } from '../../bitcoin.utils'; -import { ServicesApiServices } from '../../services/services-api.service'; -import { EnterpriseService } from '../../services/enterprise.service'; -import { ZONE_SERVICE } from '../../injection-tokens'; -import { MiningService, MiningStats } from '../../services/mining.service'; -import { ETA, EtaService } from '../../services/eta.service'; +import { StateService } from '@app/services/state.service'; +import { CacheService } from '@app/services/cache.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { AudioService } from '@app/services/audio.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { StorageService } from '@app/services/storage.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { getTransactionFlags, getUnacceleratedFeeRate } from '@app/shared/transaction.utils'; +import { Filter, TransactionFlags, toFilters } from '@app/shared/filters.utils'; +import { BlockExtended, CpfpInfo, RbfTree, MempoolPosition, DifficultyAdjustment, Acceleration, AccelerationPosition } from '@interfaces/node-api.interface'; +import { LiquidUnblinding } from '@components/transaction/liquid-ublinding'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { PriceService } from '@app/services/price.service'; +import { isFeatureActive } from '@app/bitcoin.utils'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; +import { ZONE_SERVICE } from '@app/injection-tokens'; +import { MiningService, MiningStats } from '@app/services/mining.service'; +import { ETA, EtaService } from '@app/services/eta.service'; -interface Pool { +export interface Pool { id: number; name: string; slug: string; + minerNames: string[] | null; } export interface TxAuditStatus { @@ -106,6 +107,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { pool: Pool | null; auditStatus: TxAuditStatus | null; isAcceleration: boolean = false; + accelerationCanceled: boolean = false; filters: Filter[] = []; showCpfpDetails = false; miningStats: MiningStats; @@ -118,7 +120,6 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { txChanged$ = new BehaviorSubject(false); // triggered whenever this.tx changes (long term, we should refactor to make this.tx an observable itself) isAccelerated$ = new BehaviorSubject(false); // refactor this to make isAccelerated an observable itself ETA$: Observable; - standardETA$: Observable; isCached: boolean = false; now = Date.now(); da$: Observable; @@ -139,6 +140,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { firstLoad = true; waitingForAccelerationInfo: boolean = false; isLoadingFirstSeen = false; + notAcceleratedOnLoad: boolean = null; featuresEnabled: boolean; segwitEnabled: boolean; @@ -191,7 +193,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.hideAccelerationSummary = this.stateService.isMempoolSpaceBuild ? this.storageService.getValue('hide-accelerator-pref') == 'true' : true; if (!this.stateService.isLiquid()) { - this.miningService.getMiningStats('1w').subscribe(stats => { + this.miningService.getMiningStats('1m').subscribe(stats => { this.miningStats = stats; }); } @@ -343,7 +345,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.setIsAccelerated(); }), switchMap((blockHeight: number) => { - return this.servicesApiService.getAccelerationHistory$({ blockHeight }).pipe( + return this.servicesApiService.getAllAccelerationHistory$({ blockHeight }, null, this.txId).pipe( switchMap((accelerationHistory: Acceleration[]) => { if (this.tx.acceleration && !accelerationHistory.length) { // If the just mined transaction was accelerated, but services backend did not return any acceleration data, retry return throwError('retry'); @@ -358,12 +360,19 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { }), ).subscribe((accelerationHistory) => { for (const acceleration of accelerationHistory) { - if (acceleration.txid === this.txId && (acceleration.status === 'completed' || acceleration.status === 'completed_provisional')) { - const boostCost = acceleration.boostCost || acceleration.bidBoost; - acceleration.acceleratedFeeRate = Math.max(acceleration.effectiveFee, acceleration.effectiveFee + boostCost) / acceleration.effectiveVsize; - acceleration.boost = boostCost; - this.tx.acceleratedAt = acceleration.added; - this.accelerationInfo = acceleration; + if (acceleration.txid === this.txId) { + if ((acceleration.status === 'completed' || acceleration.status === 'completed_provisional') && acceleration.pools.includes(acceleration.minedByPoolUniqueId)) { + const boostCost = acceleration.boostCost || acceleration.bidBoost; + acceleration.acceleratedFeeRate = Math.max(acceleration.effectiveFee, acceleration.effectiveFee + boostCost) / acceleration.effectiveVsize; + acceleration.boost = boostCost; + this.tx.acceleratedAt = acceleration.added; + this.accelerationInfo = acceleration; + } + if (acceleration.status === 'failed' || acceleration.status === 'failed_provisional') { + this.accelerationCanceled = true; + this.tx.acceleratedAt = acceleration.added; + this.accelerationInfo = acceleration; + } this.waitingForAccelerationInfo = false; this.setIsAccelerated(); } @@ -399,6 +408,30 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { const auditAvailable = this.isAuditAvailable(height); const isCoinbase = this.tx.vin.some(v => v.is_coinbase); const fetchAudit = auditAvailable && !isCoinbase; + + const addFirstSeen = (audit: TxAuditStatus | null, hash: string, height: number, txid: string, useFullSummary: boolean) => { + if ( + this.isFirstSeenAvailable(height) + && !audit?.firstSeen // firstSeen is not already in audit + && (!audit || audit?.seen) // audit is disabled or tx is already seen (meaning 'firstSeen' is in block summary) + ) { + return useFullSummary ? + this.apiService.getStrippedBlockTransactions$(hash).pipe( + map(strippedTxs => { + return { audit, firstSeen: strippedTxs.find(tx => tx.txid === txid)?.time }; + }), + catchError(() => of({ audit })) + ) : + this.apiService.getStrippedBlockTransaction$(hash, txid).pipe( + map(strippedTx => { + return { audit, firstSeen: strippedTx?.time }; + }), + catchError(() => of({ audit })) + ); + } + return of({ audit }); + }; + if (fetchAudit) { // If block audit is already cached, use it to get transaction audit const blockAuditLoaded = this.apiService.getBlockAuditLoaded(hash); @@ -411,33 +444,41 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { const isConflict = audit.fullrbfTxs.includes(txid); const isExpected = audit.template.some(tx => tx.txid === txid); const firstSeen = audit.template.find(tx => tx.txid === txid)?.time; + const wasSeen = audit.version === 1 ? !audit.unseenTxs.includes(txid) : (isExpected || isPrioritized || isAccelerated); return { - seen: isExpected || isPrioritized || isAccelerated, + seen: wasSeen, expected: isExpected, - added: isAdded, + added: isAdded && (audit.version === 0 || !wasSeen), prioritized: isPrioritized, conflict: isConflict, accelerated: isAccelerated, firstSeen, }; + }), + switchMap(audit => addFirstSeen(audit, hash, height, txid, true)), + catchError(() => { + return of({ audit: null }); }) ) } else { return this.apiService.getBlockTxAudit$(hash, txid).pipe( retry({ count: 3, delay: 2000 }), + switchMap(audit => addFirstSeen(audit, hash, height, txid, false)), catchError(() => { - return of(null); + return of({ audit: null }); }) ) } } else { - return of(isCoinbase ? { coinbase: true } : null); + const audit = isCoinbase ? { coinbase: true } : null; + return addFirstSeen(audit, hash, height, txid, this.apiService.getBlockSummaryLoaded(hash)); } }), ).subscribe(auditStatus => { - this.auditStatus = auditStatus; - if (this.auditStatus?.firstSeen) { - this.transactionTime = this.auditStatus.firstSeen; + this.auditStatus = auditStatus?.audit; + const firstSeen = this.auditStatus?.firstSeen || auditStatus['firstSeen']; + if (firstSeen) { + this.transactionTime = firstSeen; } this.setIsAccelerated(); }); @@ -461,15 +502,29 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { if (txPosition.position.acceleratedBy) { txPosition.cpfp.acceleratedBy = txPosition.position.acceleratedBy; } + if (txPosition.position.acceleratedAt) { + txPosition.cpfp.acceleratedAt = txPosition.position.acceleratedAt; + } + if (txPosition.position.feeDelta) { + txPosition.cpfp.feeDelta = txPosition.position.feeDelta; + } this.setCpfpInfo(txPosition.cpfp); - } else if ((this.tx?.acceleration && txPosition.position.acceleratedBy)) { - this.tx.acceleratedBy = txPosition.position.acceleratedBy; + } else if ((this.tx?.acceleration)) { + if (txPosition.position.acceleratedBy) { + this.tx.acceleratedBy = txPosition.position.acceleratedBy; + } + if (txPosition.position.acceleratedAt) { + this.tx.acceleratedAt = txPosition.position.acceleratedAt; + } + if (txPosition.position.feeDelta) { + this.tx.feeDelta = txPosition.position.feeDelta; + } } if (this.stateService.network === '') { if (!this.mempoolPosition.accelerated) { if (!this.accelerationFlowCompleted && !this.hideAccelerationSummary && !this.showAccelerationSummary) { - this.miningService.getMiningStats('1w').subscribe(stats => { + this.miningService.getMiningStats('1m').subscribe(stats => { this.miningStats = stats; }); } @@ -518,6 +573,14 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { }); } } + if (window.innerWidth <= 767.98) { + this.router.navigate([this.relativeUrlPipe.transform('/tx'), this.txId], { + queryParamsHandling: 'merge', + preserveFragment: true, + queryParams: { mode: 'details' }, + replaceUrl: true, + }); + } this.seoService.setTitle( $localize`:@@bisq.transaction.browser-title:Transaction: ${this.txId}:INTERPOLATION:` ); @@ -622,8 +685,8 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { ancestors: tx.ancestors, bestDescendant: tx.bestDescendant, }); - const hasRelatives = !!(tx.ancestors?.length || tx.bestDescendant); - this.hasEffectiveFeeRate = hasRelatives || (tx.effectiveFeePerVsize && (Math.abs(tx.effectiveFeePerVsize - tx.feePerVsize) >= 0.1)); + const hasRelatives = !!(tx.ancestors?.length || tx.bestDescendant || tx.descendants); + this.hasEffectiveFeeRate = hasRelatives || (tx.effectiveFeePerVsize && tx.effectiveFeePerVsize !== (this.tx.fee / (this.tx.weight / 4)) && tx.effectiveFeePerVsize !== (tx.fee / Math.ceil(tx.weight / 4))); } else { this.fetchCpfp$.next(this.tx.txid); } @@ -816,7 +879,19 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.tx.acceleration = cpfpInfo.acceleration; this.tx.acceleratedBy = cpfpInfo.acceleratedBy; this.tx.acceleratedAt = cpfpInfo.acceleratedAt; + this.tx.feeDelta = cpfpInfo.feeDelta; + this.accelerationCanceled = false; this.setIsAccelerated(firstCpfp); + } else if (cpfpInfo.acceleratedAt) { // Acceleration was cancelled: reset acceleration state + this.tx.acceleratedBy = cpfpInfo.acceleratedBy; + this.tx.acceleratedAt = cpfpInfo.acceleratedAt; + this.tx.feeDelta = cpfpInfo.feeDelta; + this.accelerationCanceled = true; + this.setIsAccelerated(firstCpfp); + } + + if (this.notAcceleratedOnLoad === null) { + this.notAcceleratedOnLoad = !this.isAcceleration; } if (!this.isAcceleration && this.fragmentParams.has('accelerate')) { @@ -830,12 +905,17 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.sigops = this.cpfpInfo.sigops; this.adjustedVsize = this.cpfpInfo.adjustedVsize; } - this.hasCpfp =!!(this.cpfpInfo && (this.cpfpInfo.bestDescendant || this.cpfpInfo.descendants?.length || this.cpfpInfo.ancestors?.length)); - this.hasEffectiveFeeRate = hasRelatives || (this.tx.effectiveFeePerVsize && (Math.abs(this.tx.effectiveFeePerVsize - this.tx.feePerVsize) > 0.01)); + this.hasCpfp =!!(this.cpfpInfo && relatives.length); + this.hasEffectiveFeeRate = hasRelatives || (this.tx.effectiveFeePerVsize && this.tx.effectiveFeePerVsize !== (this.tx.fee / (this.tx.weight / 4)) && this.tx.effectiveFeePerVsize !== (this.tx.fee / Math.ceil(this.tx.weight / 4))); } setIsAccelerated(initialState: boolean = false) { - this.isAcceleration = ((this.tx.acceleration && (!this.tx.status.confirmed || this.waitingForAccelerationInfo)) || (this.accelerationInfo && this.pool && this.accelerationInfo.pools.some(pool => (pool === this.pool.id)))); + this.isAcceleration = + ( + (this.tx.acceleration && (!this.tx.status.confirmed || this.waitingForAccelerationInfo)) || + (this.accelerationInfo && this.pool && this.accelerationInfo.pools.some(pool => (pool === this.pool.id))) + ) && + !this.accelerationCanceled; if (this.isAcceleration) { if (initialState) { this.accelerationFlowCompleted = true; @@ -843,25 +923,10 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { } if (this.isAcceleration) { // this immediately returns cached stats if we fetched them recently - this.miningService.getMiningStats('1w').subscribe(stats => { + this.miningService.getMiningStats('1m').subscribe(stats => { this.miningStats = stats; this.isAccelerated$.next(this.isAcceleration); // hack to trigger recalculation of ETA without adding another source observable }); - if (!this.tx.status?.confirmed) { - this.standardETA$ = combineLatest([ - this.stateService.mempoolBlocks$.pipe(startWith(null)), - this.stateService.difficultyAdjustment$.pipe(startWith(null)), - ]).pipe( - map(([mempoolBlocks, da]) => { - return this.etaService.calculateUnacceleratedETA( - this.tx, - mempoolBlocks, - da, - this.cpfpInfo, - ); - }) - ) - } } this.isAccelerated$.next(this.isAcceleration); } @@ -871,7 +936,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.segwitEnabled = !this.tx.status.confirmed || isFeatureActive(this.stateService.network, this.tx.status.block_height, 'segwit'); this.taprootEnabled = !this.tx.status.confirmed || isFeatureActive(this.stateService.network, this.tx.status.block_height, 'taproot'); this.rbfEnabled = !this.tx.status.confirmed || isFeatureActive(this.stateService.network, this.tx.status.block_height, 'rbf'); - this.tx.flags = getTransactionFlags(this.tx); + this.tx.flags = getTransactionFlags(this.tx, null, null, this.tx.status?.block_time, this.stateService.network); this.filters = this.tx.flags ? toFilters(this.tx.flags).filter(f => f.txPage) : []; this.checkAccelerationEligibility(); } else { @@ -902,6 +967,11 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { return false; } break; + case 'testnet4': + if (blockHeight < this.stateService.env.TESTNET4_BLOCK_AUDIT_START_HEIGHT) { + return false; + } + break; case 'signet': if (blockHeight < this.stateService.env.SIGNET_BLOCK_AUDIT_START_HEIGHT) { return false; @@ -915,6 +985,34 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { return true; } + isFirstSeenAvailable(blockHeight: number): boolean { + if (this.stateService.env.BASE_MODULE !== 'mempool') { + return false; + } + switch (this.stateService.network) { + case 'testnet': + if (this.stateService.env.TESTNET_TX_FIRST_SEEN_START_HEIGHT && blockHeight >= this.stateService.env.TESTNET_TX_FIRST_SEEN_START_HEIGHT) { + return true; + } + break; + case 'testnet4': + if (this.stateService.env.TESTNET4_TX_FIRST_SEEN_START_HEIGHT && blockHeight >= this.stateService.env.TESTNET4_TX_FIRST_SEEN_START_HEIGHT) { + return true; + } + break; + case 'signet': + if (this.stateService.env.SIGNET_TX_FIRST_SEEN_START_HEIGHT && blockHeight >= this.stateService.env.SIGNET_TX_FIRST_SEEN_START_HEIGHT) { + return true; + } + break; + default: + if (this.stateService.env.MAINNET_TX_FIRST_SEEN_START_HEIGHT && blockHeight >= this.stateService.env.MAINNET_TX_FIRST_SEEN_START_HEIGHT) { + return true; + } + } + return false; + } + resetTransaction() { this.firstLoad = false; this.gotInitialPosition = false; @@ -936,6 +1034,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.filters = []; this.showCpfpDetails = false; this.showAccelerationDetails = false; + this.accelerationFlowCompleted = false; this.accelerationInfo = null; this.cashappEligible = false; this.txInBlockIndex = null; @@ -1053,6 +1152,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { (!this.hideAccelerationSummary && !this.accelerationFlowCompleted) || this.forceAccelerationSummary ) + && this.notAcceleratedOnLoad // avoid briefly showing accelerator checkout on already accelerated txs ); } diff --git a/frontend/src/app/components/transaction/transaction.module.ts b/frontend/src/app/components/transaction/transaction.module.ts index b98c33e2a..80de0cf40 100644 --- a/frontend/src/app/components/transaction/transaction.module.ts +++ b/frontend/src/app/components/transaction/transaction.module.ts @@ -1,12 +1,14 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { TransactionComponent } from './transaction.component'; -import { SharedModule } from '../../shared/shared.module'; -import { TxBowtieModule } from '../tx-bowtie-graph/tx-bowtie.module'; -import { GraphsModule } from '../../graphs/graphs.module'; -import { AccelerateCheckout } from '../accelerate-checkout/accelerate-checkout.component'; -import { AccelerateFeeGraphComponent } from '../accelerate-checkout/accelerate-fee-graph.component'; +import { TransactionComponent } from '@components/transaction/transaction.component'; +import { TransactionDetailsComponent } from '@components/transaction/transaction-details/transaction-details.component'; +import { SharedModule } from '@app/shared/shared.module'; +import { TxBowtieModule } from '@components/tx-bowtie-graph/tx-bowtie.module'; +import { TransactionExtrasModule } from '@components/transaction/transaction-extras.module'; +import { GraphsModule } from '@app/graphs/graphs.module'; +import { AccelerateCheckout } from '@components/accelerate-checkout/accelerate-checkout.component'; +import { AccelerateFeeGraphComponent } from '@components/accelerate-checkout/accelerate-fee-graph.component'; const routes: Routes = [ { @@ -40,14 +42,17 @@ export class TransactionRoutingModule { } SharedModule, GraphsModule, TxBowtieModule, + TransactionExtrasModule, ], declarations: [ TransactionComponent, + TransactionDetailsComponent, AccelerateCheckout, AccelerateFeeGraphComponent, ], exports: [ TransactionComponent, + TransactionDetailsComponent, AccelerateCheckout, AccelerateFeeGraphComponent, ] diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.html b/frontend/src/app/components/transactions-list/transactions-list.component.html index 8954e4ecb..5ad1c798c 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -23,7 +23,7 @@ - + + + +
Timestamp - ‎{{ tx.status.block_time * 1000 | date:'yyyy-MM-dd HH:mm:ss' }} -
- () -
-
Confirmed
First seen
First seen
Features - -
Audit - - @if (auditStatus.coinbase) { - Coinbase - } @else if (auditStatus.expected) { - Expected in Block - } @else if (auditStatus.seen) { - Seen in Mempool - } @else if (!auditStatus.conflict) { - Not seen in Mempool - } - @if (auditStatus.added) { - Added - } - @if (auditStatus.prioritized) { - Prioritized - } - @if (auditStatus.conflict) { - Conflict - } - -
ETA - - @if (eta.blocks >= 7) { - - Not any time soon - @if (!tx?.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !showAccelerationSummary && eligibleForAcceleration) { - Accelerate - } - - } @else if (network === 'liquid' || network === 'liquidtestnet') { - - } @else { - - - @if (!tx?.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !showAccelerationSummary && eligibleForAcceleration) { - Accelerate - } - - - - } - - - - -
- - - @if (isAcceleration) { - Accelerated - } - - {{ filter.label }} - -
Fee{{ tx.fee | number }} sat
Fee rate - - @if (tx?.status?.confirmed && tx.fee && !hasEffectiveFeeRate && !accelerationInfo) { -   - - } -
Accelerated fee rateEffective fee rate -
- @if (accelerationInfo?.acceleratedFeeRate && (!tx.effectiveFeePerVsize || accelerationInfo.acceleratedFeeRate >= tx.effectiveFeePerVsize || tx.acceleration)) { - - } @else { - - } - - @if (tx?.status?.confirmed && !tx.acceleration && !accelerationInfo && tx.fee && tx.effectiveFeePerVsize) { - - } -
- @if (hasCpfp) { - - } -
- -
Miner - - - {{ pool.name }} - - - -
@@ -81,7 +81,8 @@ + +
@@ -96,6 +97,15 @@
+ +
@@ -204,7 +214,7 @@ + + + + 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
Vx4u7i>(!_R)YcDwR?hp?bKq`_+y!pd{# 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

)cUNLSy&LH+5G5LRD)SO_Ttl3R6IpU>NM40;X+ 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�hwQNqBwo<0S3B<9H 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ðLdn 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

!9 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 z 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 rpCw57{MxaL29;8Jou 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 z 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

d9lw)Ek>prP9K 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

o@Y;*L732 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

>eE(T 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 >^Nncj9n2$~U1$ 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 literal 0 HcmV?d00001 diff --git a/frontend/src/resources/metalogo.svg b/frontend/src/resources/metalogo.svg new file mode 100644 index 000000000..e3174dc62 --- /dev/null +++ b/frontend/src/resources/metalogo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/resources/profile/bitkey.svg b/frontend/src/resources/profile/bitkey.svg new file mode 100644 index 000000000..875436402 --- /dev/null +++ b/frontend/src/resources/profile/bitkey.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/resources/profile/leather.svg b/frontend/src/resources/profile/leather.svg new file mode 100644 index 000000000..a909606fa --- /dev/null +++ b/frontend/src/resources/profile/leather.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/frontend/src/resources/profile/wizardhat.png b/frontend/src/resources/profile/wizardhat.png new file mode 100644 index 0000000000000000000000000000000000000000..d385a56fa5cee913a4c19f8055a682e0c6383f92 GIT binary patch literal 131292 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 z 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 F^ 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 literal 0 HcmV?d00001 diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index 929a55c97..de0630869 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -916,6 +916,86 @@ th { } } + .beta { + @extend .beta; + margin: 24px -19px 0px 0px !important; + @media (max-width: 767.98px) { + margin: 30px -23px 0px 0px !important; + } + @media (max-width: 3429px) { + margin: 25px -23px 0px 0px !important; + } + @media (max-width: 369px) { + margin: 20px -23px 0px 0px !important; + } + } + + .etaDeepMempool { + @extend .etaDeepMempool; + @media (max-width: 995px) { + justify-content: right !important; + } + @media (max-width: 849px) { + justify-content: left !important; + } + } + + .nodes { + @extend .nodes; + direction: ltr !important; + } + + .fee-rate { + @extend .fee-rate; + direction: rtl !important; + } + + .bitcoin-satoshis-text { + direction: ltr !important; + } + + .fee-graph { + @extend .fee-graph; + margin-left: 5em !important; + } + + .acceleration-timeline { + @extend .acceleration-timeline; + direction: ltr !important; + + .interval { + @extend .interval; + direction: rtl !important; + } + + .time { + @extend .time; + direction: rtl !important; + } + } + + .tracker-bar { + @extend .tracker-bar; + direction: ltr; + } + + .confirmations { + @extend .confirmations; + margin-left: 0 !important; + margin-right: 1em; + } + + .acceleration-tooltip { + @extend .acceleration-tooltip; + direction: rtl; + text-align: right !important; + + .value { + @extend .value; + text-align: start !important; + } + } + .table th { text-align: right; } @@ -933,6 +1013,10 @@ th { @extend .ml-1; } + .mr-2 { + @extend .ml-2; + } + .float-left { float: right !important; } @@ -1319,4 +1403,8 @@ a { color: var(--fg); background-color: var(--primary); border-color: var(--primary); -} \ No newline at end of file +} + +.btn-small-height { + line-height: 1; +} diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json index 44795bd55..df2bfb201 100644 --- a/frontend/tsconfig.app.json +++ b/frontend/tsconfig.app.json @@ -2,7 +2,13 @@ "extends": "./tsconfig.base.json", "compilerOptions": { "outDir": "./out-tsc/app", - "types": [] + "types": [], + "paths": { + "@app/*" : ["src/app/*"], + "@components/*" : ["src/app/components/*"], + "@environments/*" : ["src/environments/*"], + "@interfaces/*" : ["src/app/interfaces/*"] + } }, "files": [ "src/main.ts", diff --git a/nginx.conf b/nginx.conf index abd7b1269..670764e20 100644 --- a/nginx.conf +++ b/nginx.conf @@ -108,6 +108,7 @@ http { ~*^hi hi; ~*^ne ne; ~*^lt lt; + ~*^hr hr; } map $cookie_lang $lang { @@ -145,6 +146,7 @@ http { ~*^hi hi; ~*^ne ne; ~*^lt lt; + ~*^hr hr; } server { diff --git a/production/README.md b/production/README.md index 3f1b24d22..2805cde81 100644 --- a/production/README.md +++ b/production/README.md @@ -84,11 +84,11 @@ pkg install -y zsh sudo git screen curl wget neovim rsync nginx openssl openssh- ### Node.js + npm -Build Node.js v16.16.0 and npm v8 from source using `nvm`: +Build Node.js v20.17.0 and npm v9 from source using `nvm`: ``` -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | zsh source $HOME/.zshrc -nvm install v16.16.0 --shared-zlib +nvm install v20.17.0 --shared-zlib nvm alias default node ``` diff --git a/production/bitcoin.conf b/production/bitcoin.conf index 1b4eb1171..57d993eb4 100644 --- a/production/bitcoin.conf +++ b/production/bitcoin.conf @@ -4,7 +4,6 @@ txindex=1 coinstatsindex=1 listen=1 discover=1 -par=16 dbcache=8192 mempoolfullrbf=1 maxconnections=100 @@ -15,6 +14,7 @@ rpcpassword=__BITCOIN_RPC_PASS__ whitelist=127.0.0.1 whitelist=103.99.168.0/22 whitelist=2401:b140::/32 +blocksxor=0 #uacomment=@wiz [main] diff --git a/production/bitcoin.crontab b/production/bitcoin.crontab index d1e484a0b..a5bc64241 100644 --- a/production/bitcoin.crontab +++ b/production/bitcoin.crontab @@ -1,4 +1,5 @@ @reboot sleep 5 ; /usr/local/bin/bitcoind -testnet >/dev/null 2>&1 +@reboot sleep 5 ; /usr/local/bin/bitcoind -testnet4 >/dev/null 2>&1 @reboot sleep 5 ; /usr/local/bin/bitcoind -signet >/dev/null 2>&1 @reboot sleep 10 ; screen -dmS mainnet /bitcoin/electrs/start mainnet @reboot sleep 10 ; screen -dmS testnet /bitcoin/electrs/start testnet diff --git a/production/install b/production/install index 30754863c..05b12c08e 100755 --- a/production/install +++ b/production/install @@ -47,6 +47,7 @@ UNFURL_INSTALL=ON BITCOIN_MAINNET_ENABLE=ON BITCOIN_MAINNET_MINFEE_ENABLE=ON BITCOIN_TESTNET_ENABLE=ON +BITCOIN_TESTNET4_ENABLE=ON BITCOIN_SIGNET_ENABLE=ON BITCOIN_MAINNET_LIGHTNING_ENABLE=ON BITCOIN_TESTNET_LIGHTNING_ENABLE=ON @@ -100,6 +101,13 @@ BITCOIN_TESTNET_P2P_PORT=18333 BITCOIN_TESTNET_RPC_HOST=127.0.0.1 BITCOIN_TESTNET_RPC_PORT=18332 +# used for firewall configuration +BITCOIN_TESTNET4_P2P_HOST=127.0.0.1 +BITCOIN_TESTNET4_P2P_PORT=48333 +# used for RPC communication +BITCOIN_TESTNET4_RPC_HOST=127.0.0.1 +BITCOIN_TESTNET4_RPC_PORT=48332 + # used for firewall configuration BITCOIN_SIGNET_P2P_HOST=127.0.0.1 BITCOIN_SIGNET_P2P_PORT=18333 @@ -139,6 +147,11 @@ ELECTRS_LIQUID_HTTP_PORT=3001 ELECTRS_TESTNET_HTTP_HOST=127.0.0.1 ELECTRS_TESTNET_HTTP_PORT=3002 +# set either socket or TCP host/port, not both +#ELECTRS_TESTNET4_HTTP_SOCK=/tmp/bitcoin.testnet4.electrs +ELECTRS_TESTNET4_HTTP_HOST=127.0.0.1 +ELECTRS_TESTNET4_HTTP_PORT=3005 + # set either socket or TCP host/port, not both #ELECTRS_SIGNET_HTTP_SOCK=/tmp/bitcoin.testnet.electrs ELECTRS_SIGNET_HTTP_HOST=127.0.0.1 @@ -164,6 +177,11 @@ MEMPOOL_LIQUID_HTTP_PORT=8998 MEMPOOL_TESTNET_HTTP_HOST=127.0.0.1 MEMPOOL_TESTNET_HTTP_PORT=8997 +# set either socket or TCP host/port, not both +#MEMPOOL_TESTNET4_HTTP_SOCK=/tmp/bitcoin.testnet.mempool +MEMPOOL_TESTNET4_HTTP_HOST=127.0.0.1 +MEMPOOL_TESTNET4_HTTP_PORT=8990 + # set either socket or TCP host/port, not both #MEMPOOL_BISQ_HTTP_SOCK=/tmp/bitcoin.bisq.mempool MEMPOOL_BISQ_HTTP_HOST=127.0.0.1 @@ -231,6 +249,7 @@ MYSQL_GROUP=mysql # mempool mysql user/password MEMPOOL_MAINNET_USER='mempool' MEMPOOL_TESTNET_USER='mempool_testnet' +MEMPOOL_TESTNET4_USER='mempool_testnet4' MEMPOOL_SIGNET_USER='mempool_signet' MEMPOOL_MAINNET_LIGHTNING_USER='mempool_mainnet_lightning' MEMPOOL_TESTNET_LIGHTNING_USER='mempool_testnet_lightning' @@ -241,6 +260,7 @@ MEMPOOL_BISQ_USER='mempool_bisq' # generate random hex string MEMPOOL_MAINNET_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}') MEMPOOL_TESTNET_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}') +MEMPOOL_TESTNET4_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}') MEMPOOL_SIGNET_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}') MEMPOOL_MAINNET_LIGHTNING_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}') MEMPOOL_TESTNET_LIGHTNING_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}') @@ -265,7 +285,9 @@ BITCOIN_HOME=/bitcoin # bitcoin testnet data BITCOIN_TESTNET_DATA=${BITCOIN_HOME}/testnet3 -# bitcoin testnet data +# bitcoin testnet4 data +BITCOIN_TESTNET4_DATA=${BITCOIN_HOME}/testnet4 +# bitcoin signet data BITCOIN_SIGNET_DATA=${BITCOIN_HOME}/signet # bitcoin electrs source/binaries @@ -279,6 +301,9 @@ ELECTRS_MAINNET_DATA=${ELECTRS_DATA_ROOT}/mainnet # bitcoin testnet electrs database, only a few GB ELECTRS_TESTNET_ZPOOL=${ZPOOL} ELECTRS_TESTNET_DATA=${ELECTRS_DATA_ROOT}/testnet +# bitcoin testnet4 electrs database, only a few GB +ELECTRS_TESTNET4_ZPOOL=${ZPOOL} +ELECTRS_TESTNET4_DATA=${ELECTRS_DATA_ROOT}/testnet4 # bitcoin signet electrs database, only a few GB ELECTRS_SIGNET_ZPOOL=${ZPOOL} ELECTRS_SIGNET_DATA=${ELECTRS_DATA_ROOT}/signet @@ -332,7 +357,7 @@ BITCOIN_REPO_URL=https://github.com/bitcoin/bitcoin BITCOIN_REPO_NAME=bitcoin BITCOIN_REPO_BRANCH=master #BITCOIN_LATEST_RELEASE=$(curl -s https://api.github.com/repos/bitcoin/bitcoin/releases/latest|grep tag_name|head -1|cut -d '"' -f4) -BITCOIN_LATEST_RELEASE=v25.1 +BITCOIN_LATEST_RELEASE=v28.0 echo -n '.' BISQ_REPO_URL=https://github.com/bisq-network/bisq @@ -392,9 +417,9 @@ DEBIAN_UNFURL_PKG+=(libxdamage-dev libxrandr-dev libgbm-dev libpango1.0-dev liba # packages needed for mempool ecosystem FREEBSD_PKG=() FREEBSD_PKG+=(zsh sudo git git-lfs screen curl wget calc neovim) -FREEBSD_PKG+=(openssh-portable py39-pip rust llvm10 jq base64 libzmq4) +FREEBSD_PKG+=(openssh-portable py311-pip rust llvm17 jq base64 libzmq4) FREEBSD_PKG+=(boost-libs autoconf automake gmake gcc libevent libtool pkgconf) -FREEBSD_PKG+=(nginx rsync py39-certbot-nginx mariadb1011-server keybase) +FREEBSD_PKG+=(nginx rsync py311-certbot-nginx mariadb1011-server) FREEBSD_PKG+=(geoipupdate redis) FREEBSD_UNFURL_PKG=() @@ -567,6 +592,15 @@ zfsCreateFilesystems() done fi + # Bitcoin Testnet4 + if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + zfs create -o "mountpoint=${BITCOIN_TESTNET4_DATA}" "${ZPOOL}/bitcoin/testnet4" + for folder in chainstate indexes blocks + do + zfs create -o "mountpoint=${BITCOIN_TESTNET4_DATA}/${folder}" "${ZPOOL}/bitcoin/testnet4/${folder}" + done + fi + # Bitcoin Signet if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then zfs create -o "mountpoint=${BITCOIN_SIGNET_DATA}" "${ZPOOL}/bitcoin/signet" @@ -594,6 +628,15 @@ zfsCreateFilesystems() done fi + # electrs testnet4 data + if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + zfs create -o "mountpoint=${ELECTRS_TESTNET4_DATA}" "${ELECTRS_TESTNET4_ZPOOL}/electrs/testnet4" + for folder in cache history txstore + do + zfs create -o "mountpoint=${ELECTRS_TESTNET4_DATA}/newindex/${folder}" "${ELECTRS_TESTNET4_ZPOOL}/electrs/testnet4/${folder}" + done + fi + # electrs signet data if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then zfs create -o "mountpoint=${ELECTRS_SIGNET_DATA}" "${ELECTRS_SIGNET_ZPOOL}/electrs/signet" @@ -651,6 +694,15 @@ ext4CreateDir() done fi + # Bitcoin Testnet4 + if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + mkdir -p "${BITCOIN_TESTNET4_DATA}" + for folder in chainstate indexes blocks + do + mkdir -p "${BITCOIN_TESTNET4_DATA}/${folder}" + done + fi + # Bitcoin Signet if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then mkdir -p "${BITCOIN_SIGNET_DATA}" @@ -678,6 +730,15 @@ ext4CreateDir() done fi + # electrs testnet4 data + if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + mkdir -p "${ELECTRS_TESTNET4_DATA}" + for folder in cache history txstore + do + mkdir -p "${ELECTRS_TESTNET4_DATA}/newindex/${folder}" + done + fi + # electrs signet data if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then mkdir -p "${ELECTRS_SIGNET_DATA}" @@ -769,6 +830,7 @@ LN-Mainnet:Enable Bitcoin Mainnet Lightning:ON LN-Testnet:Enable Bitcoin Testnet Lightning:ON LN-Signet:Enable Bitcoin Signet Lightning:ON Testnet:Enable Bitcoin Testnet:ON +Testnet4:Enable Bitcoin Testnet4:ON Signet:Enable Bitcoin Signet:ON Liquid:Enable Elements Liquid:ON Liquidtestnet:Enable Elements Liquidtestnet:ON @@ -818,13 +880,19 @@ else BITCOIN_TESTNET_ENABLE=OFF fi +if grep Testnet4 $tempfile >/dev/null 2>&1;then + BITCOIN_TESTNET4_ENABLE=ON +else + BITCOIN_TESTNET4_ENABLE=OFF +fi + if grep Signet $tempfile >/dev/null 2>&1;then BITCOIN_SIGNET_ENABLE=ON else BITCOIN_SIGNET_ENABLE=OFF fi -if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_MAINNET_MINFEE_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then +if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_MAINNET_MINFEE_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_TESTNET4_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then BITCOIN_INSTALL=ON else BITCOIN_INSTALL=OFF @@ -872,7 +940,7 @@ else CLN_INSTALL=OFF fi -if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then +if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_TESTNET4_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then BITCOIN_ELECTRS_INSTALL=ON else BITCOIN_ELECTRS_INSTALL=OFF @@ -1216,6 +1284,9 @@ if [ "${BITCOIN_ELECTRS_INSTALL}" = ON ];then if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then osSudo "${ROOT_USER}" chown -R "${BITCOIN_USER}:${BITCOIN_GROUP}" "${ELECTRS_TESTNET_DATA}" fi + if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + osSudo "${ROOT_USER}" chown -R "${BITCOIN_USER}:${BITCOIN_GROUP}" "${ELECTRS_TESTNET4_DATA}" + fi if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then osSudo "${ROOT_USER}" chown -R "${BITCOIN_USER}:${BITCOIN_GROUP}" "${ELECTRS_SIGNET_DATA}" fi @@ -1520,7 +1591,7 @@ fi # Bitcoin instance for Mainnet Minfee # ####################################### -if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then +if [ "${BITCOIN_MAINNET_MINFEE_ENABLE}" = ON ];then echo "[*] Installing Bitcoin Minfee service" case $OS in @@ -1550,6 +1621,23 @@ if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then esac fi +################################# +# Bitcoin instance for Testnet4 # +################################# + +if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + echo "[*] Installing Bitcoin Testnet service" + case $OS in + + FreeBSD) + ;; + + Debian) + osSudo "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/linux/bitcoin-testnet4.service" "${DEBIAN_SERVICE_HOME}" + ;; + esac +fi + ############################### # Bitcoin instance for Signet # ############################### @@ -1616,6 +1704,14 @@ if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then echo "[*] FIXME: must only crontab enabled daemons" fi +######################################### +# Electrs instance for Bitcoin Testnet4 # +######################################### + +if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + echo "[*] FIXME: must only crontab enabled daemons" +fi + ####################################### # Electrs instance for Bitcoin Signet # ####################################### @@ -1668,11 +1764,15 @@ case $OS in echo "[*] Installing Electrs Testnet Cronjob" crontab_bitcoin+="@reboot sleep 70 ; screen -dmS testnet /bitcoin/electrs/start testnet\n" fi + if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + echo "[*] Installing Electrs Testnet4 Cronjob" + crontab_bitcoin+="@reboot sleep 110 ; screen -dmS testnet4 /bitcoin/electrs/start testnet4\n" + fi if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then echo "[*] Installing Electrs Signet Cronjob" crontab_bitcoin+="@reboot sleep 90 ; screen -dmS signet /bitcoin/electrs/start signet\n" fi - if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then + if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_TESTNET4_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then echo "${crontab_bitcoin}" | crontab -u "${BITCOIN_USER}" - fi @@ -1700,7 +1800,7 @@ fi ##### Mempool -> Bitcoin Mainnet instance -if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then +if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_TESTNET4_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then echo "[*] Creating Mempool instance for Bitcoin Mainnet" osSudo "${MEMPOOL_USER}" git config --global advice.detachedHead false osSudo "${MEMPOOL_USER}" git clone --branch "${MEMPOOL_REPO_BRANCH}" "${MEMPOOL_REPO_URL}" "${MEMPOOL_HOME}/mainnet" @@ -1727,6 +1827,15 @@ if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then osSudo "${MEMPOOL_USER}" sh -c "cd ${MEMPOOL_HOME}/testnet && git checkout ${MEMPOOL_LATEST_RELEASE}" fi +if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + echo "[*] Creating Mempool instance for Bitcoin Testnet4" + osSudo "${MEMPOOL_USER}" git config --global advice.detachedHead false + osSudo "${MEMPOOL_USER}" git clone --branch "${MEMPOOL_REPO_BRANCH}" "${MEMPOOL_REPO_URL}" "${MEMPOOL_HOME}/testnet4" + + echo "[*] Checking out Mempool ${MEMPOOL_LATEST_RELEASE} for Bitcoin Testnet4" + osSudo "${MEMPOOL_USER}" sh -c "cd ${MEMPOOL_HOME}/testnet4 && git checkout ${MEMPOOL_LATEST_RELEASE}" +fi + if [ "${BITCOIN_TESTNET_LIGHTNING_ENABLE}" = ON ];then echo "[*] Creating Mempool instance for Lightning Network on Bitcoin Testnet" osSudo "${MEMPOOL_USER}" git config --global advice.detachedHead false @@ -1804,6 +1913,9 @@ grant all on mempool.* to '${MEMPOOL_MAINNET_USER}'@'localhost' identified by '$ create database mempool_testnet; grant all on mempool_testnet.* to '${MEMPOOL_TESTNET_USER}'@'localhost' identified by '${MEMPOOL_TESTNET_PASS}'; +create database mempool_testnet4; +grant all on mempool_testnet4.* to '${MEMPOOL_TESTNET4_USER}'@'localhost' identified by '${MEMPOOL_TESTNET4_PASS}'; + create database mempool_signet; grant all on mempool_signet.* to '${MEMPOOL_SIGNET_USER}'@'localhost' identified by '${MEMPOOL_SIGNET_PASS}'; @@ -1832,6 +1944,8 @@ declare -x MEMPOOL_MAINNET_USER="${MEMPOOL_MAINNET_USER}" declare -x MEMPOOL_MAINNET_PASS="${MEMPOOL_MAINNET_PASS}" declare -x MEMPOOL_TESTNET_USER="${MEMPOOL_TESTNET_USER}" declare -x MEMPOOL_TESTNET_PASS="${MEMPOOL_TESTNET_PASS}" +declare -x MEMPOOL_TESTNET4_USER="${MEMPOOL_TESTNET4_USER}" +declare -x MEMPOOL_TESTNET4_PASS="${MEMPOOL_TESTNET4_PASS}" declare -x MEMPOOL_SIGNET_USER="${MEMPOOL_SIGNET_USER}" declare -x MEMPOOL_SIGNET_PASS="${MEMPOOL_SIGNET_PASS}" declare -x MEMPOOL_MAINNET_LIGHTNING_USER="${MEMPOOL_MAINNET_LIGHTNING_USER}" @@ -1900,9 +2014,9 @@ case $OS in moused_nondefault_enable="NO" nginx_enable="YES" -nginx_profiles="mempool" -nginx_mempool_flags="-p /mempool" -nginx_mempool_configfile="/mempool/mempool/nginx/nginx.conf" +#nginx_profiles="mempool" +#nginx_mempool_flags="-p /mempool" +#nginx_mempool_configfile="/mempool/mempool.space/nginx/nginx.conf" mysql_enable="YES" mysql_dbdir="/mysql" @@ -1932,6 +2046,9 @@ EOF if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then osSudo "${ROOT_USER}" systemctl enable bitcoin-testnet.service fi + if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + osSudo "${ROOT_USER}" systemctl enable bitcoin-testnet4.service + fi if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then osSudo "${ROOT_USER}" systemctl enable bitcoin-signet.service fi diff --git a/production/linux/bitcoin-testnet4.service b/production/linux/bitcoin-testnet4.service new file mode 100644 index 000000000..1bb893c44 --- /dev/null +++ b/production/linux/bitcoin-testnet4.service @@ -0,0 +1,22 @@ +[Unit] +Description=Bitcoind-testnet4 +After=network.target + +[Service] +ExecStart=/usr/local/bin/bitcoind -conf=bitcoin.conf -daemon -testnet4 -printtoconsole -pid=/bitcoin/bitcoind-testnet4.pid +ExecStop=/usr/local/bin/bitcoin-cli -testnet4 stop + +Type=forking +PIDFile=/bitcoin/bitcoind-testnet4.pid +Restart=on-failure + +User=bitcoin +Group=bitcoin + +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + +[Install] +WantedBy=multi-user.target diff --git a/production/mempool-build-all b/production/mempool-build-all index 9bc11255b..377deb316 100755 --- a/production/mempool-build-all +++ b/production/mempool-build-all @@ -40,7 +40,7 @@ update_repo() git fetch origin || exit 1 for remote in origin;do git remote add "${remote}" "https://github.com/${remote}/mempool" >/dev/null 2>&1 - git fetch "${remote}" || exit 1 + git fetch "${remote}" --tags || exit 1 done if [ $(git tag -l "${REF}") ];then @@ -131,7 +131,7 @@ export NVM_DIR="${HOME}/.nvm" source "${NVM_DIR}/nvm.sh" # what to look for -frontends=(mainnet liquid onbtc bitb) +frontends=(mainnet liquid onbtc bitb meta) backends=(mainnet testnet testnet4 signet liquid liquidtestnet onbtc bitb) frontend_repos=() backend_repos=() @@ -148,7 +148,7 @@ for repo in $backends;do done # update all repos -for repo in $backend_repos;do +for repo in $frontend_repos $backend_repos;do update_repo "${repo}" done diff --git a/production/mempool-config.mainnet.json b/production/mempool-config.mainnet.json index b6ee68da1..39d82d8d1 100644 --- a/production/mempool-config.mainnet.json +++ b/production/mempool-config.mainnet.json @@ -150,5 +150,9 @@ "MEMPOOL_SERVICES": { "API": "https://mempool.space/api/v1/services", "ACCELERATIONS": true + }, + "WALLETS": { + "ENABLED": true, + "WALLETS": ["BITB", "3350"] } } diff --git a/production/mempool-frontend-config.mainnet.json b/production/mempool-frontend-config.mainnet.json index 84cde82cf..79acaecc5 100644 --- a/production/mempool-frontend-config.mainnet.json +++ b/production/mempool-frontend-config.mainnet.json @@ -10,6 +10,10 @@ "MEMPOOL_WEBSITE_URL": "https://mempool.space", "LIQUID_WEBSITE_URL": "https://liquid.network", "BISQ_WEBSITE_URL": "https://bisq.markets", + "MAINNET_BLOCK_AUDIT_START_HEIGHT": 773911, + "TESTNET_BLOCK_AUDIT_START_HEIGHT": 2417829, + "SIGNET_BLOCK_AUDIT_START_HEIGHT": 127609, + "MAINNET_TX_FIRST_SEEN_START_HEIGHT": 838316, "ITEMS_PER_PAGE": 25, "LIGHTNING": true, "ACCELERATOR": true, diff --git a/production/mempool-frontend-config.meta.json b/production/mempool-frontend-config.meta.json new file mode 100644 index 000000000..dad27de53 --- /dev/null +++ b/production/mempool-frontend-config.meta.json @@ -0,0 +1,19 @@ +{ + "OFFICIAL_MEMPOOL_SPACE": true, + "TESTNET_ENABLED": true, + "TESTNET4_ENABLED": true, + "LIQUID_ENABLED": true, + "LIQUID_TESTNET_ENABLED": true, + "BISQ_ENABLED": true, + "BISQ_SEPARATE_BACKEND": true, + "SIGNET_ENABLED": true, + "MEMPOOL_WEBSITE_URL": "https://mempool.space", + "LIQUID_WEBSITE_URL": "https://liquid.network", + "BISQ_WEBSITE_URL": "https://bisq.markets", + "ITEMS_PER_PAGE": 25, + "LIGHTNING": true, + "ACCELERATOR": true, + "PUBLIC_ACCELERATIONS": true, + "AUDIT": true, + "CUSTOMIZATION": "custom-meta-config.json" +} diff --git a/production/mempool-reset-all b/production/mempool-reset-all index 22f004610..d7e8ba249 100755 --- a/production/mempool-reset-all +++ b/production/mempool-reset-all @@ -1,3 +1,5 @@ #!/usr/bin/env zsh -rm $HOME/*/backend/mempool-config.json -rm $HOME/*/frontend/mempool-frontend-config.json +rm -f $HOME/*/backend/mempool-config.json +rm -f $HOME/*/frontend/mempool-frontend-config.json +rm -f $HOME/*/frontend/projects/mempool/mempool-frontend-config.json +exit 0 diff --git a/production/mempool-start-all b/production/mempool-start-all index 44933f4b4..27b12813e 100755 --- a/production/mempool-start-all +++ b/production/mempool-start-all @@ -15,7 +15,7 @@ screen -dmS x startx sleep 3 # start unfurlers for each frontend -for site in mainnet liquid onbtc bitb;do +for site in mainnet liquid onbtc bitb meta;do cd "$HOME/${site}/unfurler" && \ echo "starting mempool unfurler: ${site}" && \ screen -dmS "unfurler-${site}" sh -c 'while true;do npm run unfurler;sleep 2;done' diff --git a/production/mempool-update-repo b/production/mempool-update-repo new file mode 100755 index 000000000..43fcc0c06 --- /dev/null +++ b/production/mempool-update-repo @@ -0,0 +1 @@ +cd ~/mempool && git pull origin master && cd ~/mempool.space && git stash && git pull origin master && git stash pop ; exit diff --git a/production/nginx/http-language.conf b/production/nginx/http-language.conf index c03d776b0..14c26a741 100644 --- a/production/nginx/http-language.conf +++ b/production/nginx/http-language.conf @@ -32,6 +32,7 @@ map $http_accept_language $header_lang { ~*^vi vi; ~*^zh zh; ~*^lt lt; + ~*^hr hr; } map $cookie_lang $lang { default $header_lang; @@ -67,4 +68,5 @@ map $cookie_lang $lang { ~*^vi vi; ~*^zh zh; ~*^lt lt; + ~*^hr hr; } diff --git a/production/nginx/location-api-v1-services.conf b/production/nginx/location-api-v1-services.conf index aad13264c..a9df64bc6 100644 --- a/production/nginx/location-api-v1-services.conf +++ b/production/nginx/location-api-v1-services.conf @@ -2,9 +2,6 @@ # routing # ########### -location /api/v1/accelerations { - try_files /dev/null @mempool-api-v1-services-cache-short; -} location /api/v1/assets { try_files /dev/null @mempool-api-v1-services-cache-short; } @@ -95,6 +92,7 @@ location @mempool-api-v1-services-cache-disabled-addcors { set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; set $cors_origin 'https://mempool.space'; set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; + set $cors_expose_headers 'X-Total-Count'; set $cors_credentials 'true'; # set CORS for approved hostnames @@ -103,6 +101,7 @@ location @mempool-api-v1-services-cache-disabled-addcors { set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; set $cors_origin "$http_origin"; set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; + set $cors_expose_headers 'X-Total-Count'; set $cors_credentials 'true'; } @@ -111,6 +110,7 @@ location @mempool-api-v1-services-cache-disabled-addcors { add_header Access-Control-Allow-Origin "$cors_origin" always; add_header Access-Control-Allow-Headers "$cors_headers" always; add_header Access-Control-Allow-Credentials "$cors_credentials" always; + add_header Access-Control-Expose-Headers "$cors_expose_headers" always; proxy_redirect off; proxy_buffering off; @@ -175,6 +175,7 @@ location @mempool-api-v1-services-cache-short-addcors { set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; set $cors_origin 'https://mempool.space'; set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; + set $cors_expose_headers 'X-Total-Count'; set $cors_credentials 'true'; # set CORS for approved hostnames @@ -183,6 +184,7 @@ location @mempool-api-v1-services-cache-short-addcors { set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; set $cors_origin "$http_origin"; set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; + set $cors_expose_headers 'X-Total-Count'; set $cors_credentials 'true'; } @@ -191,6 +193,7 @@ location @mempool-api-v1-services-cache-short-addcors { add_header Access-Control-Allow-Origin "$cors_origin" always; add_header Access-Control-Allow-Headers "$cors_headers" always; add_header Access-Control-Allow-Credentials "$cors_credentials" always; + add_header Access-Control-Expose-Headers "$cors_expose_headers" always; # add our own cache headers add_header 'Pragma' 'public'; diff --git a/production/nginx/location-api.conf b/production/nginx/location-api.conf index d0f321b39..80f513147 100644 --- a/production/nginx/location-api.conf +++ b/production/nginx/location-api.conf @@ -32,6 +32,9 @@ location /api/v1/mining { location /api/v1/fees/recommended { try_files /dev/null @mempool-api-v1-cache-hot; } +location /api/v1/accelerations { + try_files /dev/null @mempool-api-v1-cache-hot; +} # it's ok to cache blockchain data "forever", so we do 30d location /api/v1/block/ { @@ -52,10 +55,10 @@ location /api/block/ { rewrite ^/api/(.*) /$1 break; try_files /dev/null @esplora-api-cache-forever; } -# other API responses cannot be cached +# we cache for 1s to mitigate DoS attacks location /api/ { rewrite ^/api/(.*) /$1 break; - try_files /dev/null @esplora-api-cache-disabled; + try_files /dev/null @esplora-api-cache-minimal; } ########### @@ -168,6 +171,23 @@ location @esplora-api-cache-disabled { expires -1; } +location @esplora-api-cache-minimal { + proxy_pass $esploraMainnet; + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_cache_background_update on; + proxy_cache_use_stale updating; + proxy_cache apihot; + proxy_cache_valid 200 1s; + proxy_redirect off; + + expires 1s; +} + location @esplora-api-cache-forever { proxy_pass $esploraMainnet; diff --git a/production/nginx/location-testnet-api.conf b/production/nginx/location-testnet-api.conf index 86cc643a3..d43a51ce5 100644 --- a/production/nginx/location-testnet-api.conf +++ b/production/nginx/location-testnet-api.conf @@ -47,10 +47,10 @@ location /testnet/api/block/ { rewrite ^/testnet/api/(.*) /$1 break; try_files /dev/null @esplora-testnet-api-cache-forever; } -# other API responses cannot be cached +# we cache for 1s to mitigate DoS attacks location /testnet/api/ { rewrite ^/testnet/api/(.*) /$1 break; - try_files /dev/null @esplora-testnet-api-cache-disabled; + try_files /dev/null @esplora-testnet-api-cache-minimal; } ########### @@ -160,3 +160,20 @@ location @esplora-testnet-api-cache-forever { expires 30d; } + +location @esplora-testnet-api-cache-minimal { + proxy_pass $esploraTestnet; + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_cache_background_update off; + proxy_cache_use_stale error; + proxy_cache apihot; + proxy_cache_valid 200 1s; + proxy_redirect off; + + expires 1s; +} diff --git a/production/nginx/nginx.conf b/production/nginx/nginx.conf index 169faab30..81c0c01d5 100644 --- a/production/nginx/nginx.conf +++ b/production/nginx/nginx.conf @@ -42,6 +42,9 @@ http { #listen [::]:443 ssl http2; server_name _; + # set cors headers if necessary + set $cors_approved_origin ''; + # tor v3 listen 127.0.0.1:81; set $onion "__NGINX_MEMPOOL_ONION__"; @@ -80,6 +83,9 @@ http { #listen [::]:443 ssl http2; server_name _; + # set cors headers if necessary + set $cors_approved_origin ''; + # tor v3 listen 127.0.0.1:83; set $onion "__NGINX_LIQUID_ONION__"; diff --git a/production/nginx/server-common.conf b/production/nginx/server-common.conf index 2f84cda7f..9a2a582c0 100644 --- a/production/nginx/server-common.conf +++ b/production/nginx/server-common.conf @@ -8,8 +8,11 @@ add_header Onion-Location http://$onion.onion$request_uri; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; # generate frame configuration from origin header -set $frameOptions "DENY"; -set $contentSecurityPolicy "frame-ancestors 'none'"; +if ($frameOptions = '') +{ + set $frameOptions "DENY"; + set $contentSecurityPolicy "frame-ancestors 'none'"; +} # used for iframes on https://mempool.space/network if ($http_referer ~ ^https://mempool.space/) diff --git a/production/unfurler-config.meta.json b/production/unfurler-config.meta.json new file mode 100644 index 000000000..0fe1f1780 --- /dev/null +++ b/production/unfurler-config.meta.json @@ -0,0 +1,17 @@ +{ + "SERVER": { + "HOST": "https://metaplanet.mempool.space", + "HTTP_PORT": 8005 + }, + "MEMPOOL": { + "HTTP_HOST": "http://127.0.0.1", + "HTTP_PORT": 85, + "NETWORK": "meta" + }, + "PUPPETEER": { + "CLUSTER_SIZE": 8, + "EXEC_PATH": "/usr/local/bin/chrome", + "MAX_PAGE_AGE": 86400, + "RENDER_TIMEOUT": 3000 + } +} diff --git a/unfurler/package-lock.json b/unfurler/package-lock.json index 45c40f097..799148486 100644 --- a/unfurler/package-lock.json +++ b/unfurler/package-lock.json @@ -1,12 +1,12 @@ { "name": "mempool-unfurl", - "version": "3.0.0-dev", + "version": "3.1.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mempool-unfurl", - "version": "3.0.0-dev", + "version": "3.0.0", "dependencies": { "@types/node": "^16.11.41", "ejs": "^3.1.10", diff --git a/unfurler/package.json b/unfurler/package.json index b4bc40e98..bf3dad55b 100644 --- a/unfurler/package.json +++ b/unfurler/package.json @@ -1,6 +1,6 @@ { "name": "mempool-unfurl", - "version": "3.0.0-dev", + "version": "3.1.0-dev", "description": "Renderer for mempool open graph link preview images", "repository": { "type": "git", diff --git a/unfurler/src/routes.ts b/unfurler/src/routes.ts index 75e136a0e..2150f87f3 100644 --- a/unfurler/src/routes.ts +++ b/unfurler/src/routes.ts @@ -301,6 +301,26 @@ export const networks = { routes: routes.lightning.routes, } } + }, + meta: { + title: 'Metaplanet Inc.', + description: 'Secure the Future with Bitcoin', + fallbackImg: '/resources/meta/meta-preview.png', + routes: { // only dynamic routes supported + block: routes.block, + address: routes.address, + tx: routes.tx, + mining: { + title: "Mining", + routes: { + pool: routes.mining.routes.pool, + } + }, + lightning: { + title: "Lightning", + routes: routes.lightning.routes, + } + } } };

@@ -236,7 +246,12 @@ - OP_RETURN {{ vout.scriptpubkey_asm | hex2ascii }} + OP_RETURN  + @if (vout.isRunestone) { + + } @else { + {{ vout.scriptpubkey_asm | hex2ascii }} + } {{ vout.scriptpubkey_type | scriptpubkeyType }} @@ -276,6 +291,15 @@
+ +
@@ -321,7 +345,7 @@
 – {{ tx.fee | number }} sat + i18n="shared.sats">sats
Show more inputs to reveal fee data
@@ -329,7 +353,7 @@ -
+ + + + + + + + + + + + + + + + + + + + +
Addresses + + + + +
+
+ +
+ +
+
Confirmed balance
Confirmed UTXOs{{ walletStats.utxos }}
Total received
+ +
+
+ +
+ + + + +
+
+

Balance History

+
+
+
+
+ +
+
+
+
+ + + + +
+
+
+ + + + + + + + + + + + +
+
+
+
+ +
+
+
+ +
+ + +
+ +
+ Error loading wallet data. +

+ ({{ error | httpErrorMsg }}) +
+
+ + + Error loading wallet data. + + +
+ + + +
+ + +
+ +
+
diff --git a/frontend/src/app/components/wallet/wallet.component.scss b/frontend/src/app/components/wallet/wallet.component.scss new file mode 100644 index 000000000..6723cffbc --- /dev/null +++ b/frontend/src/app/components/wallet/wallet.component.scss @@ -0,0 +1,117 @@ +.qr-wrapper { + background-color: #FFF; + padding: 10px; + padding-bottom: 5px; + display: inline-block; +} + +.treemap-col { + width: 45%; + height: 300px; +} + +.fiat { + display: block; + @media (min-width: 992px){ + display: inline-block; + margin-left: 10px; + } +} + +.table { + tr td { + &:last-child { + text-align: right; + @media (min-width: 576px) { + text-align: left; + } + } + } +} + +.address-list { + width: 100%; + max-width: 200px; +} + +h1 { + margin: 0px; + padding: 0px; + margin-right: 10px; + font-size: 1.9rem; + @media (min-width: 576px) { + font-size: 2rem; + float: left; + } + @media (min-width: 768px) { + font-size: 2.5rem; + } +} + +.title-address { + align-items: baseline; +} + +.address-link { + line-height: 56px; + margin-left: 0px; + top: -2px; + position: relative; + @media (min-width: 768px) { + line-height: 69px; + } +} + +.row{ + flex-direction: column; + @media (min-width: 576px) { + flex-direction: row; + } +} + +@media (max-width: 767.98px) { + .mobile-bottomcol { + margin-top: 15px; + } + .details-table td:first-child { + white-space: pre-wrap; + } +} + +.tx-link { + display: block; + height: 100%; + top: 9px; + position: relative; + @media (min-width: 576px) { + top: 11px; + } + @media (min-width: 768px) { + max-width: calc(100% - 180px); + top: 17px; + } +} + +.title-tx { + h2 { + line-height: 1; + margin-bottom: 10px; + } +} + +.liquid-address { + .address-table { + table-layout: fixed; + + tr td:first-child { + width: 170px; + } + tr td:last-child { + width: 80%; + } + } + + .qrcode-col { + flex-grow: 0.5; + } +} diff --git a/frontend/src/app/components/wallet/wallet.component.ts b/frontend/src/app/components/wallet/wallet.component.ts new file mode 100644 index 000000000..ce44250e9 --- /dev/null +++ b/frontend/src/app/components/wallet/wallet.component.ts @@ -0,0 +1,303 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { ActivatedRoute, ParamMap } from '@angular/router'; +import { switchMap, catchError, map, tap, shareReplay, startWith, scan } from 'rxjs/operators'; +import { Address, AddressTxSummary, ChainStats, Transaction } from '@interfaces/electrs.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { ApiService } from '@app/services/api.service'; +import { of, Observable, Subscription } from 'rxjs'; +import { SeoService } from '@app/services/seo.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { WalletAddress } from '@interfaces/node-api.interface'; + +class WalletStats implements ChainStats { + addresses: string[]; + funded_txo_count: number; + funded_txo_sum: number; + spent_txo_count: number; + spent_txo_sum: number; + tx_count: number; + + constructor (stats: ChainStats[], addresses: string[]) { + Object.assign(this, stats.reduce((acc, stat) => { + acc.funded_txo_count += stat.funded_txo_count; + acc.funded_txo_sum += stat.funded_txo_sum; + acc.spent_txo_count += stat.spent_txo_count; + acc.spent_txo_sum += stat.spent_txo_sum; + return acc; + }, { + funded_txo_count: 0, + funded_txo_sum: 0, + spent_txo_count: 0, + spent_txo_sum: 0, + tx_count: 0, + }) + ); + this.addresses = addresses; + } + + public addTx(tx: Transaction): void { + for (const vin of tx.vin) { + if (this.addresses.includes(vin.prevout?.scriptpubkey_address)) { + this.spendTxo(vin.prevout.value); + } + } + for (const vout of tx.vout) { + if (this.addresses.includes(vout.scriptpubkey_address)) { + this.fundTxo(vout.value); + } + } + this.tx_count++; + } + + public removeTx(tx: Transaction): void { + for (const vin of tx.vin) { + if (this.addresses.includes(vin.prevout?.scriptpubkey_address)) { + this.unspendTxo(vin.prevout.value); + } + } + for (const vout of tx.vout) { + if (this.addresses.includes(vout.scriptpubkey_address)) { + this.unfundTxo(vout.value); + } + } + this.tx_count--; + } + + private fundTxo(value: number): void { + this.funded_txo_sum += value; + this.funded_txo_count++; + } + + private unfundTxo(value: number): void { + this.funded_txo_sum -= value; + this.funded_txo_count--; + } + + private spendTxo(value: number): void { + this.spent_txo_sum += value; + this.spent_txo_count++; + } + + private unspendTxo(value: number): void { + this.spent_txo_sum -= value; + this.spent_txo_count--; + } + + get balance(): number { + return this.funded_txo_sum - this.spent_txo_sum; + } + + get totalReceived(): number { + return this.funded_txo_sum; + } + + get utxos(): number { + return this.funded_txo_count - this.spent_txo_count; + } +} + +@Component({ + selector: 'app-wallet', + templateUrl: './wallet.component.html', + styleUrls: ['./wallet.component.scss'] +}) +export class WalletComponent implements OnInit, OnDestroy { + network = ''; + + addresses: Address[] = []; + addressStrings: string[] = []; + walletName: string; + isLoadingWallet = true; + wallet$: Observable>; + walletAddresses$: Observable>; + walletSummary$: Observable; + walletStats$: Observable; + error: any; + walletSubscription: Subscription; + + collapseAddresses: boolean = true; + + fullyLoaded = false; + txCount = 0; + received = 0; + sent = 0; + chainBalance = 0; + + constructor( + private route: ActivatedRoute, + private websocketService: WebsocketService, + private stateService: StateService, + private apiService: ApiService, + private seoService: SeoService, + ) { } + + ngOnInit(): void { + this.stateService.networkChanged$.subscribe((network) => this.network = network); + this.websocketService.want(['blocks']); + this.wallet$ = this.route.paramMap.pipe( + map((params: ParamMap) => params.get('wallet') as string), + tap((walletName: string) => { + this.walletName = walletName; + this.websocketService.startTrackingWallet(walletName); + this.seoService.setTitle($localize`:@@wallet.component.browser-title:Wallet: ${walletName}:INTERPOLATION:`); + this.seoService.setDescription($localize`:@@meta.description.bitcoin.wallet:See mempool transactions, confirmed transactions, balance, and more for ${this.stateService.network==='liquid'||this.stateService.network==='liquidtestnet'?'Liquid':'Bitcoin'}${seoDescriptionNetwork(this.stateService.network)} wallet ${walletName}:INTERPOLATION:.`); + }), + switchMap((walletName: string) => this.apiService.getWallet$(walletName).pipe( + catchError((err) => { + this.error = err; + this.seoService.logSoft404(); + console.log(err); + return of({}); + }) + )), + shareReplay(1), + ); + + this.walletAddresses$ = this.wallet$.pipe( + map(wallet => { + const walletInfo: Record = {}; + for (const address of Object.keys(wallet)) { + walletInfo[address] = { + address, + chain_stats: wallet[address].stats, + mempool_stats: { + funded_txo_count: 0, + funded_txo_sum: 0, + spent_txo_count: 0, spent_txo_sum: 0, tx_count: 0 + }, + }; + } + return walletInfo; + }), + switchMap(initial => this.stateService.walletTransactions$.pipe( + startWith(null), + scan((wallet, walletTransactions) => { + for (const tx of (walletTransactions || [])) { + const funded: Record = {}; + const spent: Record = {}; + const fundedCount: Record = {}; + const spentCount: Record = {}; + for (const vin of tx.vin) { + const address = vin.prevout?.scriptpubkey_address; + if (address && wallet[address]) { + spent[address] = (spent[address] ?? 0) + (vin.prevout?.value ?? 0); + spentCount[address] = (spentCount[address] ?? 0) + 1; + } + } + for (const vout of tx.vout) { + const address = vout.scriptpubkey_address; + if (address && wallet[address]) { + funded[address] = (funded[address] ?? 0) + (vout.value ?? 0); + fundedCount[address] = (fundedCount[address] ?? 0) + 1; + } + } + for (const address of Object.keys({ ...funded, ...spent })) { + // update address stats + wallet[address].chain_stats.tx_count++; + wallet[address].chain_stats.funded_txo_count += fundedCount[address] || 0; + wallet[address].chain_stats.spent_txo_count += spentCount[address] || 0; + wallet[address].chain_stats.funded_txo_sum += funded[address] || 0; + wallet[address].chain_stats.spent_txo_sum += spent[address] || 0; + } + } + return wallet; + }, initial) + )), + tap(() => { + this.isLoadingWallet = false; + }) + ); + + this.walletSubscription = this.walletAddresses$.subscribe(wallet => { + this.addressStrings = Object.keys(wallet); + this.addresses = Object.values(wallet); + }); + + this.walletSummary$ = this.wallet$.pipe( + switchMap(wallet => this.stateService.walletTransactions$.pipe( + startWith([]), + scan((summaries, newTransactions) => { + const newSummaries: AddressTxSummary[] = []; + for (const tx of newTransactions) { + const funded: Record = {}; + const spent: Record = {}; + const fundedCount: Record = {}; + const spentCount: Record = {}; + for (const vin of tx.vin) { + const address = vin.prevout?.scriptpubkey_address; + if (address && wallet[address]) { + spent[address] = (spent[address] ?? 0) + (vin.prevout?.value ?? 0); + spentCount[address] = (spentCount[address] ?? 0) + 1; + } + } + for (const vout of tx.vout) { + const address = vout.scriptpubkey_address; + if (address && wallet[address]) { + funded[address] = (funded[address] ?? 0) + (vout.value ?? 0); + fundedCount[address] = (fundedCount[address] ?? 0) + 1; + } + } + for (const address of Object.keys({ ...funded, ...spent })) { + // add tx to summary + const txSummary: AddressTxSummary = { + txid: tx.txid, + value: (funded[address] ?? 0) - (spent[address] ?? 0), + height: tx.status.block_height, + time: tx.status.block_time, + }; + wallet[address].transactions?.push(txSummary); + newSummaries.push(txSummary); + } + } + return this.deduplicateWalletTransactions([...summaries, ...newSummaries]); + }, this.deduplicateWalletTransactions(Object.values(wallet).flatMap(address => address.transactions))) + )) + ); + + this.walletStats$ = this.wallet$.pipe( + switchMap(wallet => { + const walletStats = new WalletStats(Object.values(wallet).map(w => w.stats), Object.keys(wallet)); + return this.stateService.walletTransactions$.pipe( + startWith([]), + scan((stats, newTransactions) => { + for (const tx of newTransactions) { + stats.addTx(tx); + } + return stats; + }, walletStats), + ); + }), + ); + } + + deduplicateWalletTransactions(walletTransactions: AddressTxSummary[]): AddressTxSummary[] { + const transactions = new Map(); + for (const tx of walletTransactions) { + if (transactions.has(tx.txid)) { + transactions.get(tx.txid).value += tx.value; + } else { + transactions.set(tx.txid, tx); + } + } + return Array.from(transactions.values()).sort((a, b) => { + if (a.height === b.height) { + return b.tx_position - a.tx_position; + } + return b.height - a.height; + }); + } + + normalizeAddress(address: string): string { + if (/^[A-Z]{2,5}1[AC-HJ-NP-Z02-9]{8,100}|04[a-fA-F0-9]{128}|(02|03)[a-fA-F0-9]{64}$/.test(address)) { + return address.toLowerCase(); + } else { + return address; + } + } + + ngOnDestroy(): void { + this.websocketService.stopTrackingWallet(); + this.walletSubscription.unsubscribe(); + } +} diff --git a/frontend/src/app/dashboard/dashboard.component.ts b/frontend/src/app/dashboard/dashboard.component.ts index 6bedaafb0..c5c35dce5 100644 --- a/frontend/src/app/dashboard/dashboard.component.ts +++ b/frontend/src/app/dashboard/dashboard.component.ts @@ -1,14 +1,14 @@ import { AfterViewInit, ChangeDetectionStrategy, Component, HostListener, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; import { combineLatest, EMPTY, fromEvent, interval, merge, Observable, of, Subject, Subscription, timer } from 'rxjs'; import { catchError, delayWhen, distinctUntilChanged, filter, map, scan, share, shareReplay, startWith, switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators'; -import { AuditStatus, BlockExtended, CurrentPegs, FederationAddress, FederationUtxo, OptimizedMempoolStats, PegsVolume, RecentPeg, TransactionStripped } from '../interfaces/node-api.interface'; -import { MempoolInfo, ReplacementInfo } from '../interfaces/websocket.interface'; -import { ApiService } from '../services/api.service'; -import { StateService } from '../services/state.service'; -import { WebsocketService } from '../services/websocket.service'; -import { SeoService } from '../services/seo.service'; -import { ActiveFilter, FilterMode, GradientMode, toFlags } from '../shared/filters.utils'; -import { detectWebGL } from '../shared/graphs.utils'; +import { AuditStatus, BlockExtended, CurrentPegs, FederationAddress, FederationUtxo, OptimizedMempoolStats, PegsVolume, RecentPeg, TransactionStripped } from '@interfaces/node-api.interface'; +import { MempoolInfo, ReplacementInfo } from '@interfaces/websocket.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { SeoService } from '@app/services/seo.service'; +import { ActiveFilter, FilterMode, GradientMode, toFlags } from '@app/shared/filters.utils'; +import { detectWebGL } from '@app/shared/graphs.utils'; interface MempoolBlocksData { blocks: number; @@ -78,7 +78,7 @@ export class DashboardComponent implements OnInit, OnDestroy, AfterViewInit { { index: 0, name: $localize`:@@dfc3c34e182ea73c5d784ff7c8135f087992dac1:All`, mode: 'and', filters: [], gradient: 'age' }, { index: 1, name: $localize`Consolidation`, mode: 'and', filters: ['consolidation'], gradient: 'fee' }, { index: 2, name: $localize`Coinjoin`, mode: 'and', filters: ['coinjoin'], gradient: 'fee' }, - { index: 3, name: $localize`Data`, mode: 'or', filters: ['inscription', 'fake_pubkey', 'op_return'], gradient: 'fee' }, + { index: 3, name: $localize`Data`, mode: 'or', filters: ['inscription', 'fake_pubkey', 'fake_scripthash', 'op_return'], gradient: 'fee' }, ]; goggleFlags = 0n; goggleMode: FilterMode = 'and'; diff --git a/frontend/src/app/data-cy.directive.ts b/frontend/src/app/data-cy.directive.ts index 1e8e9aec7..7bee94346 100644 --- a/frontend/src/app/data-cy.directive.ts +++ b/frontend/src/app/data-cy.directive.ts @@ -1,5 +1,5 @@ import { Directive, ElementRef, Renderer2 } from '@angular/core'; -import { environment } from '../environments/environment'; +import { environment } from '@environments/environment'; @Directive({ selector: '[data-cy]' diff --git a/frontend/src/app/docs/api-docs/api-docs-data.ts b/frontend/src/app/docs/api-docs/api-docs-data.ts index 12bb96166..1f83cabc9 100644 --- a/frontend/src/app/docs/api-docs/api-docs-data.ts +++ b/frontend/src/app/docs/api-docs/api-docs-data.ts @@ -9163,11 +9163,13 @@ export const restApiDocsData = [ Filters can be applied:
  • status: all, requested, accelerating, mined, completed, failed
  • timeframe: 24h, 3d, 1w, 1m, 3m, 6m, 1y, 2y, 3y, 4y, all
  • -
  • poolUniqueId: any id from https://github.com/mempool/mining-pools/blob/master/pools-v2.json. Note: This will return all acceleration requests accepted by the pool but the the listed transactions may have been mined by another pool. +
  • minedByPoolUniqueId: any id from pools-v2.json
  • blockHash: a block hash
  • blockHeight: a block height
  • page: the requested page number if using pagination (min: 1)
  • pageLength: the page lenght if using pagination (min: 1, max: 50) +
  • from: unix timestamp (overrides timeframe) +
  • to: unix timestamp (overrides timeframe)

` }, urlString: "/v1/services/accelerator/accelerations/history", @@ -9187,21 +9189,22 @@ export const restApiDocsData = [ headers: '', response: `[ { - "txid": "d7e1796d8eb4a09d4e6c174e36cfd852f1e6e6c9f7df4496339933cd32cbdd1d", - "status": "completed", - "added": 1707421053, - "lastUpdated": 1719134667, - "effectiveFee": 146, - "effectiveVsize": 141, - "feeDelta": 14000, - "blockHash": "00000000000000000000482f0746d62141694b9210a813b97eb8445780a32003", - "blockHeight": 829559, - "bidBoost": 3239, - "boostVersion": "v1", + "txid": "f829900985aad885c13fb90555d27514b05a338202c7ef5d694f4813ad474487", + "status": "completed_provisional", + "added": 1728111527, + "lastUpdated": 1728112113, + "effectiveFee": 1385, + "effectiveVsize": 276, + "feeDelta": 3000, + "blockHash": "00000000000000000000cde89e34036ece454ca2d07ddd7f71ab46307ca87423", + "blockHeight": 864248, + "bidBoost": 65, + "boostVersion": "v2", "pools": [ - 111 + 111, + 115, ], - "minedByPoolUniqueId": 111 + "minedByPoolUniqueId": 115 } ]`, }, @@ -9336,7 +9339,7 @@ export const restApiDocsData = [ fragment: "accelerator-history", title: "GET Acceleration History", description: { - default: "

Returns the user's past acceleration requests.

Pass one of the following for :status: all, requested, accelerating, mined, completed, failed. Pass true in :details to get a detailed history of the acceleration request.

" + default: "

Returns the user's past acceleration requests.

Pass one of the following for :status (required): all, requested, accelerating, mined, completed, failed.
Pass true in :details to get a detailed history of the acceleration request.

" }, urlString: "/v1/services/accelerator/history?status=:status&details=:details", showConditions: [""], @@ -9446,6 +9449,36 @@ export const restApiDocsData = [ } } }, + { + options: { officialOnly: true }, + type: "endpoint", + category: "accelerator-private", + httpRequestMethod: "POST", + fragment: "accelerator-cancel", + title: "POST Cancel Acceleration (Pro)", + description: { + default: "

Sends a request to cancel an acceleration in the accelerating status.
You can retreive eligible acceleration id using the history endpoint GET /api/v1/services/accelerator/history?status=accelerating." + }, + urlString: "/v1/services/accelerator/cancel", + showConditions: [""], + showJsExamples: showJsExamplesDefaultFalse, + codeExample: { + default: { + codeTemplate: { + curl: `%{1}" "[[hostname]][[baseNetworkUrl]]/api/v1/services/accelerator/cancel`, //custom interpolation technique handled in replaceCurlPlaceholder() + commonJS: ``, + esModule: `` + }, + codeSampleMainnet: { + esModule: [], + commonJS: [], + curl: ["id=42"], + headers: "X-Mempool-Auth: stacksats", + response: `HTTP/1.1 200 OK`, + }, + } + } + }, ]; export const faqData = [ diff --git a/frontend/src/app/docs/api-docs/api-docs-nav.component.ts b/frontend/src/app/docs/api-docs/api-docs-nav.component.ts index 1abc506e5..11e39b518 100644 --- a/frontend/src/app/docs/api-docs/api-docs-nav.component.ts +++ b/frontend/src/app/docs/api-docs/api-docs-nav.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; -import { Env, StateService } from '../../services/state.service'; -import { restApiDocsData } from './api-docs-data'; -import { faqData } from './api-docs-data'; +import { Env, StateService } from '@app/services/state.service'; +import { restApiDocsData } from '@app/docs/api-docs/api-docs-data'; +import { faqData } from '@app/docs/api-docs/api-docs-data'; @Component({ selector: 'app-api-docs-nav', diff --git a/frontend/src/app/docs/api-docs/api-docs.component.ts b/frontend/src/app/docs/api-docs/api-docs.component.ts index efdc80d94..0298fc9f3 100644 --- a/frontend/src/app/docs/api-docs/api-docs.component.ts +++ b/frontend/src/app/docs/api-docs/api-docs.component.ts @@ -1,10 +1,10 @@ import { Component, OnInit, Input, QueryList, AfterViewInit, ViewChildren } from '@angular/core'; -import { Env, StateService } from '../../services/state.service'; +import { Env, StateService } from '@app/services/state.service'; import { Observable, merge, of, Subject, Subscription } from 'rxjs'; import { tap, takeUntil } from 'rxjs/operators'; import { ActivatedRoute } from "@angular/router"; -import { faqData, restApiDocsData, wsApiDocsData } from './api-docs-data'; -import { FaqTemplateDirective } from '../faq-template/faq-template.component'; +import { faqData, restApiDocsData, wsApiDocsData } from '@app/docs/api-docs/api-docs-data'; +import { FaqTemplateDirective } from '@app/docs/faq-template/faq-template.component'; @Component({ selector: 'app-api-docs', diff --git a/frontend/src/app/docs/code-template/code-template.component.ts b/frontend/src/app/docs/code-template/code-template.component.ts index b31def01c..f112e23f3 100644 --- a/frontend/src/app/docs/code-template/code-template.component.ts +++ b/frontend/src/app/docs/code-template/code-template.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnInit } from '@angular/core'; -import { Env, StateService } from '../../services/state.service'; +import { Env, StateService } from '@app/services/state.service'; @Component({ selector: 'app-code-template', diff --git a/frontend/src/app/docs/docs.module.ts b/frontend/src/app/docs/docs.module.ts index 70f22a9a6..7f94135aa 100644 --- a/frontend/src/app/docs/docs.module.ts +++ b/frontend/src/app/docs/docs.module.ts @@ -1,12 +1,12 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { SharedModule } from '../shared/shared.module'; -import { ApiDocsComponent } from './/api-docs/api-docs.component'; -import { DocsComponent } from './docs/docs.component'; -import { ApiDocsNavComponent } from './api-docs/api-docs-nav.component'; -import { CodeTemplateComponent } from './code-template/code-template.component'; -import { DocsRoutingModule } from './docs.routing.module'; -import { FaqTemplateDirective } from './faq-template/faq-template.component'; +import { SharedModule } from '@app/shared/shared.module'; +import { ApiDocsComponent } from '@app/docs/api-docs/api-docs.component'; +import { DocsComponent } from '@app/docs/docs/docs.component'; +import { ApiDocsNavComponent } from '@app/docs/api-docs/api-docs-nav.component'; +import { CodeTemplateComponent } from '@app/docs/code-template/code-template.component'; +import { DocsRoutingModule } from '@app/docs/docs.routing.module'; +import { FaqTemplateDirective } from '@app/docs/faq-template/faq-template.component'; @NgModule({ declarations: [ ApiDocsComponent, diff --git a/frontend/src/app/docs/docs.routing.module.ts b/frontend/src/app/docs/docs.routing.module.ts index 3c0eb961d..7185a7181 100644 --- a/frontend/src/app/docs/docs.routing.module.ts +++ b/frontend/src/app/docs/docs.routing.module.ts @@ -1,6 +1,6 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { DocsComponent } from './docs/docs.component'; +import { DocsComponent } from '@app/docs/docs/docs.component'; const browserWindow = window || {}; // @ts-ignore diff --git a/frontend/src/app/docs/docs/docs.component.ts b/frontend/src/app/docs/docs/docs.component.ts index 35080a19f..6d3ff4723 100644 --- a/frontend/src/app/docs/docs/docs.component.ts +++ b/frontend/src/app/docs/docs/docs.component.ts @@ -1,9 +1,9 @@ import { Component, OnInit, HostBinding } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { Env, StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; +import { Env, StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; @Component({ selector: 'app-docs', diff --git a/frontend/src/app/fiat/fiat.component.ts b/frontend/src/app/fiat/fiat.component.ts index 93752039b..95f019723 100644 --- a/frontend/src/app/fiat/fiat.component.ts +++ b/frontend/src/app/fiat/fiat.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit, ChangeDetectionStrategy, Input, ChangeDetectorRef, OnDestroy } from '@angular/core'; import { Observable, Subscription } from 'rxjs'; -import { Price } from '../services/price.service'; -import { StateService } from '../services/state.service'; +import { Price } from '@app/services/price.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-fiat', diff --git a/frontend/src/app/graphs/echarts.ts b/frontend/src/app/graphs/echarts.ts index 74fec1e71..67ed7e3b8 100644 --- a/frontend/src/app/graphs/echarts.ts +++ b/frontend/src/app/graphs/echarts.ts @@ -1,6 +1,6 @@ // Import tree-shakeable echarts import * as echarts from 'echarts/core'; -import { LineChart, LinesChart, BarChart, TreemapChart, PieChart, ScatterChart, GaugeChart } from 'echarts/charts'; +import { LineChart, LinesChart, BarChart, TreemapChart, PieChart, ScatterChart, GaugeChart, CustomChart } from 'echarts/charts'; import { TitleComponent, TooltipComponent, GridComponent, LegendComponent, GeoComponent, DataZoomComponent, VisualMapComponent, MarkLineComponent } from 'echarts/components'; import { SVGRenderer, CanvasRenderer } from 'echarts/renderers'; // Typescript interfaces @@ -12,6 +12,7 @@ echarts.use([ TitleComponent, TooltipComponent, GridComponent, LegendComponent, GeoComponent, DataZoomComponent, VisualMapComponent, MarkLineComponent, - LineChart, LinesChart, BarChart, TreemapChart, PieChart, ScatterChart, GaugeChart + LineChart, LinesChart, BarChart, TreemapChart, PieChart, ScatterChart, GaugeChart, + CustomChart, ]); export { echarts, EChartsOption, TreemapSeriesOption, LineSeriesOption, PieSeriesOption }; \ No newline at end of file diff --git a/frontend/src/app/graphs/graphs.module.ts b/frontend/src/app/graphs/graphs.module.ts index de048fd2d..4e6b00637 100644 --- a/frontend/src/app/graphs/graphs.module.ts +++ b/frontend/src/app/graphs/graphs.module.ts @@ -1,42 +1,45 @@ import { NgModule } from '@angular/core'; import { NgxEchartsModule } from 'ngx-echarts'; -import { GraphsRoutingModule } from './graphs.routing.module'; -import { SharedModule } from '../shared/shared.module'; +import { GraphsRoutingModule } from '@app/graphs/graphs.routing.module'; +import { SharedModule } from '@app/shared/shared.module'; -import { AccelerationFeesGraphComponent } from '../components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component'; -import { BlockFeesGraphComponent } from '../components/block-fees-graph/block-fees-graph.component'; -import { BlockFeesSubsidyGraphComponent } from '../components/block-fees-subsidy-graph/block-fees-subsidy-graph.component'; -import { BlockRewardsGraphComponent } from '../components/block-rewards-graph/block-rewards-graph.component'; -import { BlockFeeRatesGraphComponent } from '../components/block-fee-rates-graph/block-fee-rates-graph.component'; -import { BlockSizesWeightsGraphComponent } from '../components/block-sizes-weights-graph/block-sizes-weights-graph.component'; -import { FeeDistributionGraphComponent } from '../components/fee-distribution-graph/fee-distribution-graph.component'; -import { IncomingTransactionsGraphComponent } from '../components/incoming-transactions-graph/incoming-transactions-graph.component'; -import { MempoolGraphComponent } from '../components/mempool-graph/mempool-graph.component'; -import { LbtcPegsGraphComponent } from '../components/lbtc-pegs-graph/lbtc-pegs-graph.component'; -import { ReservesSupplyStatsComponent } from '../components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component'; -import { ExpiredUtxosStatsComponent } from '../components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component'; -import { ReservesRatioStatsComponent } from '../components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component'; -import { ReservesRatioComponent } from '../components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component'; -import { RecentPegsStatsComponent } from '../components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component'; -import { RecentPegsListComponent } from '../components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component'; -import { FederationAddressesStatsComponent } from '../components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component'; -import { FederationAddressesListComponent } from '../components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component'; -import { GraphsComponent } from '../components/graphs/graphs.component'; -import { StatisticsComponent } from '../components/statistics/statistics.component'; -import { MempoolBlockComponent } from '../components/mempool-block/mempool-block.component'; -import { PoolRankingComponent } from '../components/pool-ranking/pool-ranking.component'; -import { PoolComponent } from '../components/pool/pool.component'; -import { TelevisionComponent } from '../components/television/television.component'; -import { DashboardComponent } from '../dashboard/dashboard.component'; -import { CustomDashboardComponent } from '../components/custom-dashboard/custom-dashboard.component'; -import { MiningDashboardComponent } from '../components/mining-dashboard/mining-dashboard.component'; -import { AcceleratorDashboardComponent } from '../components/acceleration/accelerator-dashboard/accelerator-dashboard.component'; -import { HashrateChartComponent } from '../components/hashrate-chart/hashrate-chart.component'; -import { HashrateChartPoolsComponent } from '../components/hashrates-chart-pools/hashrate-chart-pools.component'; -import { BlockHealthGraphComponent } from '../components/block-health-graph/block-health-graph.component'; -import { AddressComponent } from '../components/address/address.component'; -import { AddressGraphComponent } from '../components/address-graph/address-graph.component'; -import { ActiveAccelerationBox } from '../components/acceleration/active-acceleration-box/active-acceleration-box.component'; +import { AccelerationFeesGraphComponent } from '@components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component'; +import { BlockFeesGraphComponent } from '@components/block-fees-graph/block-fees-graph.component'; +import { BlockFeesSubsidyGraphComponent } from '@components/block-fees-subsidy-graph/block-fees-subsidy-graph.component'; +import { BlockRewardsGraphComponent } from '@components/block-rewards-graph/block-rewards-graph.component'; +import { BlockFeeRatesGraphComponent } from '@components/block-fee-rates-graph/block-fee-rates-graph.component'; +import { BlockSizesWeightsGraphComponent } from '@components/block-sizes-weights-graph/block-sizes-weights-graph.component'; +import { FeeDistributionGraphComponent } from '@components/fee-distribution-graph/fee-distribution-graph.component'; +import { IncomingTransactionsGraphComponent } from '@components/incoming-transactions-graph/incoming-transactions-graph.component'; +import { MempoolGraphComponent } from '@components/mempool-graph/mempool-graph.component'; +import { LbtcPegsGraphComponent } from '@components/lbtc-pegs-graph/lbtc-pegs-graph.component'; +import { ReservesSupplyStatsComponent } from '@components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component'; +import { ExpiredUtxosStatsComponent } from '@components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component'; +import { ReservesRatioStatsComponent } from '@components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component'; +import { ReservesRatioComponent } from '@components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component'; +import { RecentPegsStatsComponent } from '@components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component'; +import { RecentPegsListComponent } from '@components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component'; +import { FederationAddressesStatsComponent } from '@components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component'; +import { FederationAddressesListComponent } from '@components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component'; +import { GraphsComponent } from '@components/graphs/graphs.component'; +import { StatisticsComponent } from '@components/statistics/statistics.component'; +import { MempoolBlockComponent } from '@components/mempool-block/mempool-block.component'; +import { PoolRankingComponent } from '@components/pool-ranking/pool-ranking.component'; +import { PoolComponent } from '@components/pool/pool.component'; +import { TelevisionComponent } from '@components/television/television.component'; +import { DashboardComponent } from '@app/dashboard/dashboard.component'; +import { CustomDashboardComponent } from '@components/custom-dashboard/custom-dashboard.component'; +import { MiningDashboardComponent } from '@components/mining-dashboard/mining-dashboard.component'; +import { AcceleratorDashboardComponent } from '@components/acceleration/accelerator-dashboard/accelerator-dashboard.component'; +import { HashrateChartComponent } from '@components/hashrate-chart/hashrate-chart.component'; +import { HashrateChartPoolsComponent } from '@components/hashrates-chart-pools/hashrate-chart-pools.component'; +import { BlockHealthGraphComponent } from '@components/block-health-graph/block-health-graph.component'; +import { AddressComponent } from '@components/address/address.component'; +import { WalletComponent } from '@components/wallet/wallet.component'; +import { AddressGraphComponent } from '@components/address-graph/address-graph.component'; +import { UtxoGraphComponent } from '@components/utxo-graph/utxo-graph.component'; +import { ActiveAccelerationBox } from '@components/acceleration/active-acceleration-box/active-acceleration-box.component'; +import { AddressesTreemap } from '@components/addresses-treemap/addresses-treemap.component'; import { CommonModule } from '@angular/common'; @NgModule({ @@ -45,6 +48,7 @@ import { CommonModule } from '@angular/common'; CustomDashboardComponent, MempoolBlockComponent, AddressComponent, + WalletComponent, MiningDashboardComponent, AcceleratorDashboardComponent, @@ -76,14 +80,16 @@ import { CommonModule } from '@angular/common'; HashrateChartPoolsComponent, BlockHealthGraphComponent, AddressGraphComponent, + UtxoGraphComponent, ActiveAccelerationBox, + AddressesTreemap, ], imports: [ CommonModule, SharedModule, GraphsRoutingModule, NgxEchartsModule.forRoot({ - echarts: () => import('./echarts').then(m => m.echarts), + echarts: () => import('@app/graphs/echarts').then(m => m.echarts), }) ], exports: [ diff --git a/frontend/src/app/graphs/graphs.routing.module.ts b/frontend/src/app/graphs/graphs.routing.module.ts index 40bf64144..886d55072 100644 --- a/frontend/src/app/graphs/graphs.routing.module.ts +++ b/frontend/src/app/graphs/graphs.routing.module.ts @@ -1,27 +1,28 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { BlockHealthGraphComponent } from '../components/block-health-graph/block-health-graph.component'; -import { BlockFeeRatesGraphComponent } from '../components/block-fee-rates-graph/block-fee-rates-graph.component'; -import { BlockFeesGraphComponent } from '../components/block-fees-graph/block-fees-graph.component'; -import { BlockFeesSubsidyGraphComponent } from '../components/block-fees-subsidy-graph/block-fees-subsidy-graph.component'; -import { BlockRewardsGraphComponent } from '../components/block-rewards-graph/block-rewards-graph.component'; -import { BlockSizesWeightsGraphComponent } from '../components/block-sizes-weights-graph/block-sizes-weights-graph.component'; -import { GraphsComponent } from '../components/graphs/graphs.component'; -import { HashrateChartComponent } from '../components/hashrate-chart/hashrate-chart.component'; -import { HashrateChartPoolsComponent } from '../components/hashrates-chart-pools/hashrate-chart-pools.component'; -import { MempoolBlockComponent } from '../components/mempool-block/mempool-block.component'; -import { MiningDashboardComponent } from '../components/mining-dashboard/mining-dashboard.component'; -import { AcceleratorDashboardComponent } from '../components/acceleration/accelerator-dashboard/accelerator-dashboard.component'; -import { PoolRankingComponent } from '../components/pool-ranking/pool-ranking.component'; -import { PoolComponent } from '../components/pool/pool.component'; -import { StartComponent } from '../components/start/start.component'; -import { StatisticsComponent } from '../components/statistics/statistics.component'; -import { TelevisionComponent } from '../components/television/television.component'; -import { DashboardComponent } from '../dashboard/dashboard.component'; -import { CustomDashboardComponent } from '../components/custom-dashboard/custom-dashboard.component'; -import { AccelerationFeesGraphComponent } from '../components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component'; -import { AccelerationsListComponent } from '../components/acceleration/accelerations-list/accelerations-list.component'; -import { AddressComponent } from '../components/address/address.component'; +import { BlockHealthGraphComponent } from '@components/block-health-graph/block-health-graph.component'; +import { BlockFeeRatesGraphComponent } from '@components/block-fee-rates-graph/block-fee-rates-graph.component'; +import { BlockFeesGraphComponent } from '@components/block-fees-graph/block-fees-graph.component'; +import { BlockFeesSubsidyGraphComponent } from '@components/block-fees-subsidy-graph/block-fees-subsidy-graph.component'; +import { BlockRewardsGraphComponent } from '@components/block-rewards-graph/block-rewards-graph.component'; +import { BlockSizesWeightsGraphComponent } from '@components/block-sizes-weights-graph/block-sizes-weights-graph.component'; +import { GraphsComponent } from '@components/graphs/graphs.component'; +import { HashrateChartComponent } from '@components/hashrate-chart/hashrate-chart.component'; +import { HashrateChartPoolsComponent } from '@components/hashrates-chart-pools/hashrate-chart-pools.component'; +import { MempoolBlockComponent } from '@components/mempool-block/mempool-block.component'; +import { MiningDashboardComponent } from '@components/mining-dashboard/mining-dashboard.component'; +import { AcceleratorDashboardComponent } from '@components/acceleration/accelerator-dashboard/accelerator-dashboard.component'; +import { PoolRankingComponent } from '@components/pool-ranking/pool-ranking.component'; +import { PoolComponent } from '@components/pool/pool.component'; +import { StartComponent } from '@components/start/start.component'; +import { StatisticsComponent } from '@components/statistics/statistics.component'; +import { TelevisionComponent } from '@components/television/television.component'; +import { DashboardComponent } from '@app/dashboard/dashboard.component'; +import { CustomDashboardComponent } from '@components/custom-dashboard/custom-dashboard.component'; +import { AccelerationFeesGraphComponent } from '@components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component'; +import { AccelerationsListComponent } from '@components/acceleration/accelerations-list/accelerations-list.component'; +import { AddressComponent } from '@components/address/address.component'; +import { WalletComponent } from '@components/wallet/wallet.component'; const browserWindow = window || {}; // @ts-ignore @@ -88,6 +89,15 @@ const routes: Routes = [ networkSpecific: true, } }, + { + path: 'wallet/:wallet', + children: [], + component: WalletComponent, + data: { + ogImage: true, + networkSpecific: true, + } + }, { path: 'graphs', data: { networks: ['bitcoin', 'liquid'] }, @@ -146,7 +156,7 @@ const routes: Routes = [ { path: 'lightning', data: { preload: true, networks: ['bitcoin'] }, - loadChildren: () => import ('./lightning-graphs.module').then(m => m.LightningGraphsModule), + loadChildren: () => import ('@app/graphs/lightning-graphs.module').then(m => m.LightningGraphsModule), }, { path: '', diff --git a/frontend/src/app/graphs/lightning-graphs.module.ts b/frontend/src/app/graphs/lightning-graphs.module.ts index ac123be33..869ce94af 100644 --- a/frontend/src/app/graphs/lightning-graphs.module.ts +++ b/frontend/src/app/graphs/lightning-graphs.module.ts @@ -1,13 +1,13 @@ import { NgModule } from '@angular/core'; -import { SharedModule } from '../shared/shared.module'; +import { SharedModule } from '@app/shared/shared.module'; import { CommonModule } from '@angular/common'; import { RouterModule, Routes } from '@angular/router'; -import { NodesNetworksChartComponent } from '../lightning/nodes-networks-chart/nodes-networks-chart.component'; -import { LightningStatisticsChartComponent } from '../lightning/statistics-chart/lightning-statistics-chart.component'; -import { NodesPerISPChartComponent } from '../lightning/nodes-per-isp-chart/nodes-per-isp-chart.component'; -import { NodesPerCountryChartComponent } from '../lightning/nodes-per-country-chart/nodes-per-country-chart.component'; -import { NodesMap } from '../lightning/nodes-map/nodes-map.component'; -import { NodesChannelsMap } from '../lightning/nodes-channels-map/nodes-channels-map.component'; +import { NodesNetworksChartComponent } from '@app/lightning/nodes-networks-chart/nodes-networks-chart.component'; +import { LightningStatisticsChartComponent } from '@app/lightning/statistics-chart/lightning-statistics-chart.component'; +import { NodesPerISPChartComponent } from '@app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component'; +import { NodesPerCountryChartComponent } from '@app/lightning/nodes-per-country-chart/nodes-per-country-chart.component'; +import { NodesMap } from '@app/lightning/nodes-map/nodes-map.component'; +import { NodesChannelsMap } from '@app/lightning/nodes-channels-map/nodes-channels-map.component'; const routes: Routes = [ { diff --git a/frontend/src/app/interfaces/electrs.interface.ts b/frontend/src/app/interfaces/electrs.interface.ts index 1ffc807a9..5a707d889 100644 --- a/frontend/src/app/interfaces/electrs.interface.ts +++ b/frontend/src/app/interfaces/electrs.interface.ts @@ -1,5 +1,5 @@ -import { Price } from '../services/price.service'; -import { IChannel } from './node-api.interface'; +import { Price } from '@app/services/price.service'; +import { IChannel } from '@interfaces/node-api.interface'; export interface Transaction { txid: string; @@ -17,11 +17,13 @@ export interface Transaction { feePerVsize?: number; effectiveFeePerVsize?: number; ancestors?: Ancestor[]; + descendants?: Ancestor[]; bestDescendant?: BestDescendant | null; cpfpChecked?: boolean; acceleration?: boolean; acceleratedBy?: number[]; acceleratedAt?: number; + feeDelta?: number; deleteAfter?: number; _unblinded?: any; _deduced?: boolean; @@ -72,6 +74,8 @@ export interface Vin { issuance?: Issuance; // Custom lazy?: boolean; + // Ord + isInscription?: boolean; } interface Issuance { @@ -96,6 +100,8 @@ export interface Vout { valuecommitment?: number; asset?: string; pegout?: Pegout; + // Ord + isRunestone?: boolean; } interface Pegout { @@ -232,3 +238,10 @@ interface AssetStats { peg_out_amount: number; burn_count: number; } + +export interface Utxo { + txid: string; + vout: number; + value: number; + status: Status; +} diff --git a/frontend/src/app/interfaces/node-api.interface.ts b/frontend/src/app/interfaces/node-api.interface.ts index bda103691..b39f8e0d3 100644 --- a/frontend/src/app/interfaces/node-api.interface.ts +++ b/frontend/src/app/interfaces/node-api.interface.ts @@ -1,4 +1,4 @@ -import { AddressTxSummary, Block, Transaction } from "./electrs.interface"; +import { AddressTxSummary, Block, ChainStats, Transaction } from "./electrs.interface"; export interface OptimizedMempoolStats { added: number; @@ -31,6 +31,7 @@ export interface CpfpInfo { acceleration?: boolean; acceleratedBy?: number[]; acceleratedAt?: number; + feeDelta?: number; } export interface RbfInfo { @@ -142,6 +143,8 @@ export interface SinglePoolStats { rank: number; share: number; lastEstimatedHashrate: number; + lastEstimatedHashrate3d: number; + lastEstimatedHashrate1w: number; emptyBlockRatio: string; logo: string; slug: string; @@ -151,6 +154,8 @@ export interface SinglePoolStats { export interface PoolsStats { blockCount: number; lastEstimatedHashrate: number; + lastEstimatedHashrate3d: number; + lastEstimatedHashrate1w: number; pools: SinglePoolStats[]; } @@ -202,6 +207,7 @@ export interface BlockExtension { id: number; name: string; slug: string; + minerNames: string[] | null; } } @@ -210,6 +216,8 @@ export interface BlockExtended extends Block { } export interface BlockAudit extends BlockExtended { + version: number, + unseenTxs?: string[], missingTxs: string[], addedTxs: string[], prioritizedTxs: string[], @@ -236,7 +244,7 @@ export interface TransactionStripped { acc?: boolean; flags?: number | null; time?: number; - status?: 'found' | 'missing' | 'sigop' | 'fresh' | 'freshcpfp' | 'added' | 'prioritized' | 'censored' | 'selected' | 'rbf' | 'accelerated'; + status?: 'found' | 'missing' | 'sigop' | 'fresh' | 'freshcpfp' | 'added' | 'added_prioritized' | 'prioritized' | 'added_deprioritized' | 'deprioritized' | 'censored' | 'selected' | 'rbf' | 'accelerated'; context?: 'projected' | 'actual'; } @@ -250,6 +258,8 @@ export interface MempoolPosition { vsize: number, accelerated?: boolean, acceleratedBy?: number[], + acceleratedAt?: number, + feeDelta?: number, } export interface AccelerationPosition extends MempoolPosition { @@ -448,8 +458,26 @@ export interface TestMempoolAcceptResult { ['reject-reason']?: string, } +export interface SubmitPackageResult { + package_msg: string; + "tx-results": { [wtxid: string]: TxResult }; + "replaced-transactions"?: string[]; +} + +export interface TxResult { + txid: string; + "other-wtxid"?: string; + vsize?: number; + fees?: { + base: number; + "effective-feerate"?: number; + "effective-includes"?: string[]; + }; + error?: string; +} export interface WalletAddress { address: string; active: boolean; - transactions?: AddressTxSummary[]; -} \ No newline at end of file + stats: ChainStats; + transactions: AddressTxSummary[]; +} diff --git a/frontend/src/app/interfaces/websocket.interface.ts b/frontend/src/app/interfaces/websocket.interface.ts index 6e3c0bb22..89c8e3884 100644 --- a/frontend/src/app/interfaces/websocket.interface.ts +++ b/frontend/src/app/interfaces/websocket.interface.ts @@ -1,13 +1,13 @@ import { SafeResourceUrl } from '@angular/platform-browser'; -import { ILoadingIndicators } from '../services/state.service'; -import { Transaction } from './electrs.interface'; -import { Acceleration, BlockExtended, DifficultyAdjustment, RbfTree, TransactionStripped } from './node-api.interface'; +import { ILoadingIndicators } from '@app/services/state.service'; +import { Transaction } from '@interfaces/electrs.interface'; +import { Acceleration, BlockExtended, DifficultyAdjustment, RbfTree, TransactionStripped } from '@interfaces/node-api.interface'; export interface WebsocketResponse { backend?: 'esplora' | 'electrum' | 'none'; block?: BlockExtended; blocks?: BlockExtended[]; - conversions?: any; + conversions?: Record; txConfirmed?: string; historicalDate?: string; mempoolInfo?: MempoolInfo; @@ -73,11 +73,13 @@ export interface MempoolBlockWithTransactions extends MempoolBlock { } export interface MempoolBlockDelta { + block: number; added: TransactionStripped[]; removed: string[]; changed: { txid: string, rate: number, flags: number, acc: boolean }[]; } export interface MempoolBlockState { + block: number; transactions: TransactionStripped[]; } export type MempoolBlockUpdate = MempoolBlockDelta | MempoolBlockState; @@ -142,4 +144,4 @@ export interface HealthCheckHost { link?: string; statusPage?: SafeResourceUrl; flag?: string; -} \ No newline at end of file +} diff --git a/frontend/src/app/lightning/channel/channel-box/channel-box.component.spec.ts b/frontend/src/app/lightning/channel/channel-box/channel-box.component.spec.ts index ae9463a6c..22dd36f75 100644 --- a/frontend/src/app/lightning/channel/channel-box/channel-box.component.spec.ts +++ b/frontend/src/app/lightning/channel/channel-box/channel-box.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ChannelBoxComponent } from './channel-box.component'; +import { ChannelBoxComponent } from '@components/channel-box.component'; describe('ChannelBoxComponent', () => { let component: ChannelBoxComponent; diff --git a/frontend/src/app/lightning/channel/channel-close-box/channel-close-box.component.spec.ts b/frontend/src/app/lightning/channel/channel-close-box/channel-close-box.component.spec.ts index eea4ee99c..9a63d7f59 100644 --- a/frontend/src/app/lightning/channel/channel-close-box/channel-close-box.component.spec.ts +++ b/frontend/src/app/lightning/channel/channel-close-box/channel-close-box.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ChannelCloseBoxComponent } from './channel-close-box.component'; +import { ChannelCloseBoxComponent } from '@components/channel-close-box.component'; describe('ChannelCloseBoxComponent', () => { let component: ChannelCloseBoxComponent; diff --git a/frontend/src/app/lightning/channel/channel-preview.component.ts b/frontend/src/app/lightning/channel/channel-preview.component.ts index 7e3152513..84a85f9c6 100644 --- a/frontend/src/app/lightning/channel/channel-preview.component.ts +++ b/frontend/src/app/lightning/channel/channel-preview.component.ts @@ -2,9 +2,9 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { Observable, of } from 'rxjs'; import { catchError, switchMap, tap } from 'rxjs/operators'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { LightningApiService } from '../lightning-api.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-channel-preview', diff --git a/frontend/src/app/lightning/channel/channel.component.scss b/frontend/src/app/lightning/channel/channel.component.scss index 9451c8112..89a43acf3 100644 --- a/frontend/src/app/lightning/channel/channel.component.scss +++ b/frontend/src/app/lightning/channel/channel.component.scss @@ -68,7 +68,7 @@ h3 { .loading-spinner { position: absolute; top: 400px; - z-index: 100; + z-index: 99; width: 100%; left: 0; @media (max-width: 767.98px) { diff --git a/frontend/src/app/lightning/channel/channel.component.ts b/frontend/src/app/lightning/channel/channel.component.ts index a26101bdb..501fc74f6 100644 --- a/frontend/src/app/lightning/channel/channel.component.ts +++ b/frontend/src/app/lightning/channel/channel.component.ts @@ -2,10 +2,10 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { Observable, of, zip } from 'rxjs'; import { catchError, map, shareReplay, switchMap, tap } from 'rxjs/operators'; -import { IChannel } from '../../interfaces/node-api.interface'; -import { ElectrsApiService } from '../../services/electrs-api.service'; -import { SeoService } from '../../services/seo.service'; -import { LightningApiService } from '../lightning-api.service'; +import { IChannel } from '@interfaces/node-api.interface'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; +import { SeoService } from '@app/services/seo.service'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-channel', diff --git a/frontend/src/app/lightning/channels-list/channels-list.component.ts b/frontend/src/app/lightning/channels-list/channels-list.component.ts index d083178c0..3439bb2b4 100644 --- a/frontend/src/app/lightning/channels-list/channels-list.component.ts +++ b/frontend/src/app/lightning/channels-list/channels-list.component.ts @@ -2,8 +2,8 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnI import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { BehaviorSubject, merge, Observable } from 'rxjs'; import { map, switchMap, tap } from 'rxjs/operators'; -import { isMobile } from '../../shared/common.utils'; -import { LightningApiService } from '../lightning-api.service'; +import { isMobile } from '@app/shared/common.utils'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-channels-list', diff --git a/frontend/src/app/lightning/channels-statistics/channels-statistics.component.ts b/frontend/src/app/lightning/channels-statistics/channels-statistics.component.ts index f2b78f53c..ee3e13d10 100644 --- a/frontend/src/app/lightning/channels-statistics/channels-statistics.component.ts +++ b/frontend/src/app/lightning/channels-statistics/channels-statistics.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { INodesStatistics } from '../../interfaces/node-api.interface'; +import { INodesStatistics } from '@interfaces/node-api.interface'; @Component({ selector: 'app-channels-statistics', diff --git a/frontend/src/app/lightning/group/group-preview.component.ts b/frontend/src/app/lightning/group/group-preview.component.ts index 35bcb6e0f..4b8f5ed77 100644 --- a/frontend/src/app/lightning/group/group-preview.component.ts +++ b/frontend/src/app/lightning/group/group-preview.component.ts @@ -1,10 +1,10 @@ import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { map, switchMap, Observable, catchError, of } from 'rxjs'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { GeolocationData } from '../../shared/components/geolocation/geolocation.component'; -import { LightningApiService } from '../lightning-api.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; interface NodeGroup { name: string; diff --git a/frontend/src/app/lightning/group/group.component.ts b/frontend/src/app/lightning/group/group.component.ts index ea83653c2..76f9ef080 100644 --- a/frontend/src/app/lightning/group/group.component.ts +++ b/frontend/src/app/lightning/group/group.component.ts @@ -1,9 +1,9 @@ import { Component, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { map, Observable, share } from 'rxjs'; -import { SeoService } from '../../services/seo.service'; -import { GeolocationData } from '../../shared/components/geolocation/geolocation.component'; -import { LightningApiService } from '../lightning-api.service'; +import { SeoService } from '@app/services/seo.service'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-group', diff --git a/frontend/src/app/lightning/justice-list/justice-list.component.ts b/frontend/src/app/lightning/justice-list/justice-list.component.ts index d48cdb7ea..e075aed93 100644 --- a/frontend/src/app/lightning/justice-list/justice-list.component.ts +++ b/frontend/src/app/lightning/justice-list/justice-list.component.ts @@ -1,9 +1,9 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { map, Observable, of, Subject, Subscription, switchMap, tap, zip } from 'rxjs'; -import { IChannel } from '../../interfaces/node-api.interface'; -import { LightningApiService } from '../lightning-api.service'; -import { Transaction } from '../../interfaces/electrs.interface'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { IChannel } from '@interfaces/node-api.interface'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { Transaction } from '@interfaces/electrs.interface'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; @Component({ selector: 'app-justice-list', diff --git a/frontend/src/app/lightning/lightning-api.service.ts b/frontend/src/app/lightning/lightning-api.service.ts index 74f048d68..14276dc12 100644 --- a/frontend/src/app/lightning/lightning-api.service.ts +++ b/frontend/src/app/lightning/lightning-api.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; import { BehaviorSubject, Observable, catchError, filter, of, shareReplay, take, tap } from 'rxjs'; -import { StateService } from '../services/state.service'; -import { IChannel, INodesRanking, IOldestNodes, ITopNodesPerCapacity, ITopNodesPerChannels } from '../interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { IChannel, INodesRanking, IOldestNodes, ITopNodesPerCapacity, ITopNodesPerChannels } from '@interfaces/node-api.interface'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts b/frontend/src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts index fd72cddfe..47b7700a4 100644 --- a/frontend/src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts +++ b/frontend/src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts @@ -1,11 +1,11 @@ import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, OnInit } from '@angular/core'; import { Observable, merge } from 'rxjs'; import { share } from 'rxjs/operators'; -import { INodesRanking, INodesStatistics } from '../../interfaces/node-api.interface'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { StateService } from '../../services/state.service'; -import { LightningApiService } from '../lightning-api.service'; +import { INodesRanking, INodesStatistics } from '@interfaces/node-api.interface'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { StateService } from '@app/services/state.service'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-lightning-dashboard', diff --git a/frontend/src/app/lightning/lightning-previews.module.ts b/frontend/src/app/lightning/lightning-previews.module.ts index c41ba8d20..5efac798f 100644 --- a/frontend/src/app/lightning/lightning-previews.module.ts +++ b/frontend/src/app/lightning/lightning-previews.module.ts @@ -1,15 +1,15 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { SharedModule } from '../shared/shared.module'; +import { SharedModule } from '@app/shared/shared.module'; import { RouterModule } from '@angular/router'; -import { GraphsModule } from '../graphs/graphs.module'; -import { LightningModule } from './lightning.module'; -import { LightningApiService } from './lightning-api.service'; -import { NodePreviewComponent } from './node/node-preview.component'; -import { LightningPreviewsRoutingModule } from './lightning-previews.routing.module'; -import { ChannelPreviewComponent } from './channel/channel-preview.component'; -import { NodesPerISPPreview } from './nodes-per-isp/nodes-per-isp-preview.component'; -import { GroupPreviewComponent } from './group/group-preview.component'; +import { GraphsModule } from '@app/graphs/graphs.module'; +import { LightningModule } from '@app/lightning/lightning.module'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { NodePreviewComponent } from '@app/lightning/node/node-preview.component'; +import { LightningPreviewsRoutingModule } from '@app/lightning/lightning-previews.routing.module'; +import { ChannelPreviewComponent } from '@app/lightning/channel/channel-preview.component'; +import { NodesPerISPPreview } from '@app/lightning/nodes-per-isp/nodes-per-isp-preview.component'; +import { GroupPreviewComponent } from '@app/lightning/group/group-preview.component'; @NgModule({ declarations: [ NodePreviewComponent, diff --git a/frontend/src/app/lightning/lightning-previews.routing.module.ts b/frontend/src/app/lightning/lightning-previews.routing.module.ts index 6cce90766..d899e559b 100644 --- a/frontend/src/app/lightning/lightning-previews.routing.module.ts +++ b/frontend/src/app/lightning/lightning-previews.routing.module.ts @@ -1,9 +1,9 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { NodePreviewComponent } from './node/node-preview.component'; -import { ChannelPreviewComponent } from './channel/channel-preview.component'; -import { NodesPerISPPreview } from './nodes-per-isp/nodes-per-isp-preview.component'; -import { GroupPreviewComponent } from './group/group-preview.component'; +import { NodePreviewComponent } from '@app/lightning/node/node-preview.component'; +import { ChannelPreviewComponent } from '@app/lightning/channel/channel-preview.component'; +import { NodesPerISPPreview } from '@app/lightning/nodes-per-isp/nodes-per-isp-preview.component'; +import { GroupPreviewComponent } from '@app/lightning/group/group-preview.component'; const routes: Routes = [ { diff --git a/frontend/src/app/lightning/lightning-wrapper/lightning-wrapper.component.ts b/frontend/src/app/lightning/lightning-wrapper/lightning-wrapper.component.ts index 11bf4dc5d..220e7eebd 100644 --- a/frontend/src/app/lightning/lightning-wrapper/lightning-wrapper.component.ts +++ b/frontend/src/app/lightning/lightning-wrapper/lightning-wrapper.component.ts @@ -1,5 +1,7 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; -import { WebsocketService } from '../../services/websocket.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { Router, ActivatedRoute } from '@angular/router'; +import { handleDemoRedirect } from '../../shared/common.utils'; @Component({ selector: 'app-lightning-wrapper', @@ -11,10 +13,14 @@ export class LightningWrapperComponent implements OnInit { constructor( private websocketService: WebsocketService, + private router: Router, + private route: ActivatedRoute ) { } ngOnInit() { this.websocketService.want(['blocks']); + + handleDemoRedirect(this.route, this.router); } } diff --git a/frontend/src/app/lightning/lightning.module.ts b/frontend/src/app/lightning/lightning.module.ts index 0b824ad78..405900e19 100644 --- a/frontend/src/app/lightning/lightning.module.ts +++ b/frontend/src/app/lightning/lightning.module.ts @@ -1,39 +1,39 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { SharedModule } from '../shared/shared.module'; -import { LightningDashboardComponent } from './lightning-dashboard/lightning-dashboard.component'; -import { LightningApiService } from './lightning-api.service'; -import { NodesListComponent } from './nodes-list/nodes-list.component'; +import { SharedModule } from '@app/shared/shared.module'; +import { LightningDashboardComponent } from '@app/lightning/lightning-dashboard/lightning-dashboard.component'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { NodesListComponent } from '@app/lightning/nodes-list/nodes-list.component'; import { RouterModule } from '@angular/router'; -import { NodeStatisticsComponent } from './node-statistics/node-statistics.component'; -import { NodeComponent } from './node/node.component'; -import { LightningRoutingModule } from './lightning.routing.module'; -import { ChannelsListComponent } from './channels-list/channels-list.component'; -import { ChannelComponent } from './channel/channel.component'; -import { LightningWrapperComponent } from './lightning-wrapper/lightning-wrapper.component'; -import { ChannelBoxComponent } from './channel/channel-box/channel-box.component'; -import { ChannelCloseBoxComponent } from './channel/channel-close-box/channel-close-box.component'; -import { ClosingTypeComponent } from './channel/closing-type/closing-type.component'; -import { LightningStatisticsChartComponent } from './statistics-chart/lightning-statistics-chart.component'; -import { NodeStatisticsChartComponent } from './node-statistics-chart/node-statistics-chart.component'; -import { NodeFeeChartComponent } from './node-fee-chart/node-fee-chart.component'; -import { GraphsModule } from '../graphs/graphs.module'; -import { NodesNetworksChartComponent } from './nodes-networks-chart/nodes-networks-chart.component'; -import { ChannelsStatisticsComponent } from './channels-statistics/channels-statistics.component'; -import { NodesPerISPChartComponent } from './nodes-per-isp-chart/nodes-per-isp-chart.component'; -import { NodesPerCountry } from './nodes-per-country/nodes-per-country.component'; -import { NodesPerISP } from './nodes-per-isp/nodes-per-isp.component'; -import { NodesPerCountryChartComponent } from '../lightning/nodes-per-country-chart/nodes-per-country-chart.component'; -import { NodesMap } from '../lightning/nodes-map/nodes-map.component'; -import { NodesChannelsMap } from '../lightning/nodes-channels-map/nodes-channels-map.component'; -import { NodesRanking } from '../lightning/nodes-ranking/nodes-ranking.component'; -import { TopNodesPerChannels } from '../lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component'; -import { TopNodesPerCapacity } from '../lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component'; -import { JusticeList } from '../lightning/justice-list/justice-list.component'; -import { OldestNodes } from '../lightning/nodes-ranking/oldest-nodes/oldest-nodes.component'; -import { NodesRankingsDashboard } from '../lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component'; -import { NodeChannels } from '../lightning/nodes-channels/node-channels.component'; -import { GroupComponent } from './group/group.component'; +import { NodeStatisticsComponent } from '@app/lightning/node-statistics/node-statistics.component'; +import { NodeComponent } from '@app/lightning/node/node.component'; +import { LightningRoutingModule } from '@app/lightning/lightning.routing.module'; +import { ChannelsListComponent } from '@app/lightning/channels-list/channels-list.component'; +import { ChannelComponent } from '@app/lightning/channel/channel.component'; +import { LightningWrapperComponent } from '@app/lightning/lightning-wrapper/lightning-wrapper.component'; +import { ChannelBoxComponent } from '@app/lightning/channel/channel-box/channel-box.component'; +import { ChannelCloseBoxComponent } from '@app/lightning/channel/channel-close-box/channel-close-box.component'; +import { ClosingTypeComponent } from '@app/lightning/channel/closing-type/closing-type.component'; +import { LightningStatisticsChartComponent } from '@app/lightning/statistics-chart/lightning-statistics-chart.component'; +import { NodeStatisticsChartComponent } from '@app/lightning/node-statistics-chart/node-statistics-chart.component'; +import { NodeFeeChartComponent } from '@app/lightning/node-fee-chart/node-fee-chart.component'; +import { GraphsModule } from '@app/graphs/graphs.module'; +import { NodesNetworksChartComponent } from '@app/lightning/nodes-networks-chart/nodes-networks-chart.component'; +import { ChannelsStatisticsComponent } from '@app/lightning/channels-statistics/channels-statistics.component'; +import { NodesPerISPChartComponent } from '@app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component'; +import { NodesPerCountry } from '@app/lightning/nodes-per-country/nodes-per-country.component'; +import { NodesPerISP } from '@app/lightning/nodes-per-isp/nodes-per-isp.component'; +import { NodesPerCountryChartComponent } from '@app/lightning/nodes-per-country-chart/nodes-per-country-chart.component'; +import { NodesMap } from '@app/lightning/nodes-map/nodes-map.component'; +import { NodesChannelsMap } from '@app/lightning/nodes-channels-map/nodes-channels-map.component'; +import { NodesRanking } from '@app/lightning/nodes-ranking/nodes-ranking.component'; +import { TopNodesPerChannels } from '@app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component'; +import { TopNodesPerCapacity } from '@app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component'; +import { JusticeList } from '@app/lightning/justice-list/justice-list.component'; +import { OldestNodes } from '@app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component'; +import { NodesRankingsDashboard } from '@app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component'; +import { NodeChannels } from '@app/lightning/nodes-channels/node-channels.component'; +import { GroupComponent } from '@app/lightning/group/group.component'; @NgModule({ declarations: [ diff --git a/frontend/src/app/lightning/lightning.routing.module.ts b/frontend/src/app/lightning/lightning.routing.module.ts index 8b8041181..c7f167308 100644 --- a/frontend/src/app/lightning/lightning.routing.module.ts +++ b/frontend/src/app/lightning/lightning.routing.module.ts @@ -1,15 +1,15 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { LightningDashboardComponent } from './lightning-dashboard/lightning-dashboard.component'; -import { LightningWrapperComponent } from './lightning-wrapper/lightning-wrapper.component'; -import { NodeComponent } from './node/node.component'; -import { ChannelComponent } from './channel/channel.component'; -import { NodesPerCountry } from './nodes-per-country/nodes-per-country.component'; -import { NodesPerISP } from './nodes-per-isp/nodes-per-isp.component'; -import { NodesRanking } from './nodes-ranking/nodes-ranking.component'; -import { NodesRankingsDashboard } from './nodes-rankings-dashboard/nodes-rankings-dashboard.component'; -import { GroupComponent } from './group/group.component'; -import { JusticeList } from './justice-list/justice-list.component'; +import { LightningDashboardComponent } from '@app/lightning/lightning-dashboard/lightning-dashboard.component'; +import { LightningWrapperComponent } from '@app/lightning/lightning-wrapper/lightning-wrapper.component'; +import { NodeComponent } from '@app/lightning/node/node.component'; +import { ChannelComponent } from '@app/lightning/channel/channel.component'; +import { NodesPerCountry } from '@app/lightning/nodes-per-country/nodes-per-country.component'; +import { NodesPerISP } from '@app/lightning/nodes-per-isp/nodes-per-isp.component'; +import { NodesRanking } from '@app/lightning/nodes-ranking/nodes-ranking.component'; +import { NodesRankingsDashboard } from '@app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component'; +import { GroupComponent } from '@app/lightning/group/group.component'; +import { JusticeList } from '@app/lightning/justice-list/justice-list.component'; const routes: Routes = [ { diff --git a/frontend/src/app/lightning/node-fee-chart/node-fee-chart.component.ts b/frontend/src/app/lightning/node-fee-chart/node-fee-chart.component.ts index 7f329eaf2..65a12cf38 100644 --- a/frontend/src/app/lightning/node-fee-chart/node-fee-chart.component.ts +++ b/frontend/src/app/lightning/node-fee-chart/node-fee-chart.component.ts @@ -1,11 +1,11 @@ import { Component, Inject, Input, LOCALE_ID, OnInit, HostBinding } from '@angular/core'; -import { EChartsOption } from '../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { switchMap } from 'rxjs/operators'; -import { download } from '../../shared/graphs.utils'; -import { LightningApiService } from '../lightning-api.service'; +import { download } from '@app/shared/graphs.utils'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; import { ActivatedRoute, ParamMap } from '@angular/router'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { StateService } from '../../services/state.service'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-node-fee-chart', @@ -16,7 +16,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], }) diff --git a/frontend/src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts b/frontend/src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts index 35cd8b236..de9711d01 100644 --- a/frontend/src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts +++ b/frontend/src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts @@ -1,14 +1,14 @@ import { Component, Inject, Input, LOCALE_ID, OnInit, HostBinding } from '@angular/core'; -import { EChartsOption } from '../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { switchMap, tap } from 'rxjs/operators'; import { formatNumber } from '@angular/common'; import { UntypedFormGroup } from '@angular/forms'; -import { StorageService } from '../../services/storage.service'; -import { download } from '../../shared/graphs.utils'; -import { LightningApiService } from '../lightning-api.service'; +import { StorageService } from '@app/services/storage.service'; +import { download } from '@app/shared/graphs.utils'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; import { ActivatedRoute, ParamMap } from '@angular/router'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-node-statistics-chart', @@ -19,7 +19,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], }) diff --git a/frontend/src/app/lightning/node-statistics/node-statistics.component.ts b/frontend/src/app/lightning/node-statistics/node-statistics.component.ts index 338e17ab8..a4b061e38 100644 --- a/frontend/src/app/lightning/node-statistics/node-statistics.component.ts +++ b/frontend/src/app/lightning/node-statistics/node-statistics.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { INodesStatistics } from '../../interfaces/node-api.interface'; +import { INodesStatistics } from '@interfaces/node-api.interface'; @Component({ selector: 'app-node-statistics', diff --git a/frontend/src/app/lightning/node/node-preview.component.ts b/frontend/src/app/lightning/node/node-preview.component.ts index d47a8c5ad..259313de6 100644 --- a/frontend/src/app/lightning/node/node-preview.component.ts +++ b/frontend/src/app/lightning/node/node-preview.component.ts @@ -2,11 +2,11 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { Observable } from 'rxjs'; import { catchError, map, switchMap } from 'rxjs/operators'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { getFlagEmoji } from '../../shared/common.utils'; -import { LightningApiService } from '../lightning-api.service'; -import { isMobile } from '../../shared/common.utils'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { getFlagEmoji } from '@app/shared/common.utils'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { isMobile } from '@app/shared/common.utils'; @Component({ selector: 'app-node-preview', diff --git a/frontend/src/app/lightning/node/node.component.ts b/frontend/src/app/lightning/node/node.component.ts index cc7c8e5b1..4ad455dee 100644 --- a/frontend/src/app/lightning/node/node.component.ts +++ b/frontend/src/app/lightning/node/node.component.ts @@ -2,13 +2,13 @@ import { ChangeDetectionStrategy, Component, OnInit, ChangeDetectorRef } from '@ import { ActivatedRoute, ParamMap } from '@angular/router'; import { Observable, of } from 'rxjs'; import { catchError, map, switchMap, tap, share } from 'rxjs/operators'; -import { SeoService } from '../../services/seo.service'; -import { ApiService } from '../../services/api.service'; -import { LightningApiService } from '../lightning-api.service'; -import { GeolocationData } from '../../shared/components/geolocation/geolocation.component'; -import { ILiquidityAd, parseLiquidityAdHex } from './liquidity-ad'; -import { haversineDistance, kmToMiles } from '../../../app/shared/common.utils'; -import { ServicesApiServices } from '../../services/services-api.service'; +import { SeoService } from '@app/services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; +import { ILiquidityAd, parseLiquidityAdHex } from '@app/lightning/node/liquidity-ad'; +import { haversineDistance, kmToMiles } from '@app/shared/common.utils'; +import { ServicesApiServices } from '@app/services/services-api.service'; interface CustomRecord { type: string; diff --git a/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.scss b/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.scss index 16482a0da..ad71cfb8e 100644 --- a/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.scss +++ b/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.scss @@ -102,7 +102,7 @@ position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; @media (max-width: 767.98px) { top: 550px; } @@ -110,7 +110,7 @@ .loading-spinner.widget { position: absolute; top: 200px; - z-index: 100; + z-index: 99; width: 100%; left: 0; @media (max-width: 767.98px) { @@ -120,7 +120,7 @@ .loading-spinner.nodepage { position: absolute; top: 200px; - z-index: 100; + z-index: 99; width: 100%; left: 0; } @@ -128,7 +128,7 @@ .loading-spinner.channelpage { position: absolute; top: 400px; - z-index: 100; + z-index: 99; width: 100%; left: 0; @media (max-width: 767.98px) { diff --git a/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts b/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts index 3447348be..a1efdc144 100644 --- a/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts +++ b/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts @@ -1,16 +1,16 @@ import { ChangeDetectionStrategy, Component, Input, Output, EventEmitter, NgZone, OnInit } from '@angular/core'; -import { SeoService } from '../../services/seo.service'; -import { ApiService } from '../../services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { ApiService } from '@app/services/api.service'; import { delay, Observable, of, switchMap, tap, zip } from 'rxjs'; -import { AssetsService } from '../../services/assets.service'; +import { AssetsService } from '@app/services/assets.service'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { StateService } from '../../services/state.service'; -import { EChartsOption, echarts } from '../../graphs/echarts'; -import { isMobile } from '../../shared/common.utils'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { getFlagEmoji } from '../../shared/common.utils'; -import { lerpColor } from '../../shared/graphs.utils'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; +import { EChartsOption, echarts } from '@app/graphs/echarts'; +import { isMobile } from '@app/shared/common.utils'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { getFlagEmoji } from '@app/shared/common.utils'; +import { lerpColor } from '@app/shared/graphs.utils'; @Component({ selector: 'app-nodes-channels-map', diff --git a/frontend/src/app/lightning/nodes-channels/node-channels.component.scss b/frontend/src/app/lightning/nodes-channels/node-channels.component.scss index 78510203f..08dc5c2cb 100644 --- a/frontend/src/app/lightning/nodes-channels/node-channels.component.scss +++ b/frontend/src/app/lightning/nodes-channels/node-channels.component.scss @@ -8,7 +8,7 @@ left: 0; right: 0; width: 100%; - z-index: 100; + z-index: 99; } .spinner-border { diff --git a/frontend/src/app/lightning/nodes-channels/node-channels.component.ts b/frontend/src/app/lightning/nodes-channels/node-channels.component.ts index fce014e77..96f74bfed 100644 --- a/frontend/src/app/lightning/nodes-channels/node-channels.component.ts +++ b/frontend/src/app/lightning/nodes-channels/node-channels.component.ts @@ -1,13 +1,13 @@ import { formatNumber } from '@angular/common'; import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, NgZone, OnChanges } from '@angular/core'; import { Router } from '@angular/router'; -import { EChartsOption, TreemapSeriesOption } from '../../graphs/echarts'; +import { EChartsOption, TreemapSeriesOption } from '@app/graphs/echarts'; import { Observable, share, switchMap, tap } from 'rxjs'; -import { lerpColor } from '../../shared/graphs.utils'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { LightningApiService } from '../lightning-api.service'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { StateService } from '../../services/state.service'; +import { lerpColor } from '@app/shared/graphs.utils'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-node-channels', @@ -144,4 +144,4 @@ export class NodeChannels implements OnChanges { }); }); } -} \ No newline at end of file +} diff --git a/frontend/src/app/lightning/nodes-map/nodes-map.component.scss b/frontend/src/app/lightning/nodes-map/nodes-map.component.scss index 82362a257..d0fa1016f 100644 --- a/frontend/src/app/lightning/nodes-map/nodes-map.component.scss +++ b/frontend/src/app/lightning/nodes-map/nodes-map.component.scss @@ -68,7 +68,7 @@ position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; @media (max-width: 767.98px) { top: 550px; } diff --git a/frontend/src/app/lightning/nodes-map/nodes-map.component.ts b/frontend/src/app/lightning/nodes-map/nodes-map.component.ts index 50df2f986..c4d56676c 100644 --- a/frontend/src/app/lightning/nodes-map/nodes-map.component.ts +++ b/frontend/src/app/lightning/nodes-map/nodes-map.component.ts @@ -1,15 +1,15 @@ import { ChangeDetectionStrategy, Component, Inject, Input, Output, EventEmitter, LOCALE_ID, NgZone, OnDestroy, OnInit, OnChanges } from '@angular/core'; -import { SeoService } from '../../services/seo.service'; -import { ApiService } from '../../services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { ApiService } from '@app/services/api.service'; import { Observable, BehaviorSubject, switchMap, tap, combineLatest } from 'rxjs'; -import { AssetsService } from '../../services/assets.service'; -import { EChartsOption, echarts } from '../../graphs/echarts'; -import { lerpColor } from '../../shared/graphs.utils'; +import { AssetsService } from '@app/services/assets.service'; +import { EChartsOption, echarts } from '@app/graphs/echarts'; +import { lerpColor } from '@app/shared/graphs.utils'; import { Router } from '@angular/router'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { StateService } from '../../services/state.service'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { getFlagEmoji } from '../../shared/common.utils'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { getFlagEmoji } from '@app/shared/common.utils'; @Component({ selector: 'app-nodes-map', diff --git a/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts b/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts index 9784e0a5b..a5d0d076a 100644 --- a/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts +++ b/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts @@ -1,17 +1,17 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit, HostBinding, OnChanges, SimpleChanges } from '@angular/core'; -import { echarts, EChartsOption, LineSeriesOption } from '../../graphs/echarts'; +import { echarts, EChartsOption, LineSeriesOption } from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { StorageService } from '../../services/storage.service'; -import { MiningService } from '../../services/mining.service'; -import { download } from '../../shared/graphs.utils'; -import { SeoService } from '../../services/seo.service'; -import { LightningApiService } from '../lightning-api.service'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { isMobile } from '../../shared/common.utils'; -import { StateService } from '../../services/state.service'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; +import { download } from '@app/shared/graphs.utils'; +import { SeoService } from '@app/services/seo.service'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { isMobile } from '@app/shared/common.utils'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-nodes-networks-chart', @@ -22,7 +22,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts b/frontend/src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts index 7eba4f9b7..986484d8a 100644 --- a/frontend/src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts +++ b/frontend/src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -1,15 +1,15 @@ import { ChangeDetectionStrategy, Component, OnInit, HostBinding, NgZone } from '@angular/core'; import { Router } from '@angular/router'; -import { EChartsOption, PieSeriesOption } from '../../graphs/echarts'; +import { EChartsOption, PieSeriesOption } from '@app/graphs/echarts'; import { map, Observable, share, tap } from 'rxjs'; -import { chartColors } from '../../app.constants'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { StateService } from '../../services/state.service'; -import { download } from '../../shared/graphs.utils'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { getFlagEmoji } from '../../shared/common.utils'; +import { chartColors } from '@app/app.constants'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { StateService } from '@app/services/state.service'; +import { download } from '@app/shared/graphs.utils'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { getFlagEmoji } from '@app/shared/common.utils'; @Component({ selector: 'app-nodes-per-country-chart', diff --git a/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.ts b/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.ts index 619ee01c0..b2b9e1f5c 100644 --- a/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.ts +++ b/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.ts @@ -1,10 +1,10 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { BehaviorSubject, combineLatest, map, Observable, share, tap } from 'rxjs'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { getFlagEmoji } from '../../shared/common.utils'; -import { GeolocationData } from '../../shared/components/geolocation/geolocation.component'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { getFlagEmoji } from '@app/shared/common.utils'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; @Component({ selector: 'app-nodes-per-country', diff --git a/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.scss b/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.scss index b9490d579..e1b66cc2b 100644 --- a/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.scss +++ b/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.scss @@ -46,7 +46,7 @@ position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } .pool-distribution { diff --git a/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts b/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts index 429d7ee36..56a03a524 100644 --- a/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts +++ b/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts @@ -1,15 +1,15 @@ import { ChangeDetectionStrategy, Component, OnInit, HostBinding, NgZone, Input } from '@angular/core'; import { Router } from '@angular/router'; -import { EChartsOption, PieSeriesOption } from '../../graphs/echarts'; +import { EChartsOption, PieSeriesOption } from '@app/graphs/echarts'; import { combineLatest, map, Observable, share, startWith, Subject, switchMap, tap } from 'rxjs'; -import { chartColors } from '../../app.constants'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { StateService } from '../../services/state.service'; -import { isMobile } from '../../shared/common.utils'; -import { download } from '../../shared/graphs.utils'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { chartColors } from '@app/app.constants'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { StateService } from '@app/services/state.service'; +import { isMobile } from '@app/shared/common.utils'; +import { download } from '@app/shared/graphs.utils'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; @Component({ selector: 'app-nodes-per-isp-chart', diff --git a/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts b/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts index 313353ab8..9fc071eb5 100644 --- a/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts +++ b/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts @@ -1,11 +1,11 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { catchError, map, switchMap, Observable, share, of } from 'rxjs'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { getFlagEmoji } from '../../shared/common.utils'; -import { GeolocationData } from '../../shared/components/geolocation/geolocation.component'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { getFlagEmoji } from '@app/shared/common.utils'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; @Component({ selector: 'app-nodes-per-isp-preview', diff --git a/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts b/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts index f6c61a9f6..1c8ad3e1b 100644 --- a/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts +++ b/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -1,10 +1,10 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { BehaviorSubject, combineLatest, map, Observable, share, tap } from 'rxjs'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { getFlagEmoji } from '../../shared/common.utils'; -import { GeolocationData } from '../../shared/components/geolocation/geolocation.component'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { getFlagEmoji } from '@app/shared/common.utils'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; @Component({ selector: 'app-nodes-per-isp', diff --git a/frontend/src/app/lightning/nodes-ranking/nodes-ranking.component.ts b/frontend/src/app/lightning/nodes-ranking/nodes-ranking.component.ts index 8a1eae3dc..569bd8827 100644 --- a/frontend/src/app/lightning/nodes-ranking/nodes-ranking.component.ts +++ b/frontend/src/app/lightning/nodes-ranking/nodes-ranking.component.ts @@ -1,9 +1,9 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { LightningApiService } from '../lightning-api.service'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; import { share } from 'rxjs/operators'; import { Observable } from 'rxjs'; -import { INodesStatistics } from '../../interfaces/node-api.interface'; +import { INodesStatistics } from '@interfaces/node-api.interface'; @Component({ selector: 'app-nodes-ranking', diff --git a/frontend/src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts b/frontend/src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts index d83f3db0a..a554341b9 100644 --- a/frontend/src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts +++ b/frontend/src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts @@ -1,9 +1,9 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { map, Observable } from 'rxjs'; -import { GeolocationData } from '../../../shared/components/geolocation/geolocation.component'; -import { SeoService } from '../../../services/seo.service'; -import { IOldestNodes } from '../../../interfaces/node-api.interface'; -import { LightningApiService } from '../../lightning-api.service'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; +import { SeoService } from '@app/services/seo.service'; +import { IOldestNodes } from '@interfaces/node-api.interface'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-oldest-nodes', diff --git a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts index 0b8c03bbd..24c8757b6 100644 --- a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts +++ b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts @@ -1,10 +1,10 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { combineLatest, map, Observable } from 'rxjs'; -import { INodesRanking, INodesStatistics, ITopNodesPerCapacity } from '../../../interfaces/node-api.interface'; -import { SeoService } from '../../../services/seo.service'; -import { StateService } from '../../../services/state.service'; -import { GeolocationData } from '../../../shared/components/geolocation/geolocation.component'; -import { LightningApiService } from '../../lightning-api.service'; +import { INodesRanking, INodesStatistics, ITopNodesPerCapacity } from '@interfaces/node-api.interface'; +import { SeoService } from '@app/services/seo.service'; +import { StateService } from '@app/services/state.service'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-top-nodes-per-capacity', diff --git a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts index 56d55a5d3..6dbcb9c3e 100644 --- a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts +++ b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts @@ -1,10 +1,10 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { combineLatest, map, Observable } from 'rxjs'; -import { INodesRanking, INodesStatistics, ITopNodesPerChannels } from '../../../interfaces/node-api.interface'; -import { SeoService } from '../../../services/seo.service'; -import { StateService } from '../../../services/state.service'; -import { GeolocationData } from '../../../shared/components/geolocation/geolocation.component'; -import { LightningApiService } from '../../lightning-api.service'; +import { INodesRanking, INodesStatistics, ITopNodesPerChannels } from '@interfaces/node-api.interface'; +import { SeoService } from '@app/services/seo.service'; +import { StateService } from '@app/services/state.service'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-top-nodes-per-channels', diff --git a/frontend/src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts b/frontend/src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts index 178ca783c..5561d086e 100644 --- a/frontend/src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts +++ b/frontend/src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts @@ -1,8 +1,8 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { Observable, share } from 'rxjs'; -import { INodesRanking } from '../../interfaces/node-api.interface'; -import { SeoService } from '../../services/seo.service'; -import { LightningApiService } from '../lightning-api.service'; +import { INodesRanking } from '@interfaces/node-api.interface'; +import { SeoService } from '@app/services/seo.service'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-nodes-rankings-dashboard', diff --git a/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts b/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts index 44f359ae8..08523088c 100644 --- a/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts +++ b/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts @@ -1,17 +1,17 @@ import { Component, Inject, Input, LOCALE_ID, OnInit, HostBinding, OnChanges, SimpleChanges } from '@angular/core'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { Observable, combineLatest, fromEvent } from 'rxjs'; import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { SeoService } from '../../services/seo.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { StorageService } from '../../services/storage.service'; -import { MiningService } from '../../services/mining.service'; -import { download } from '../../shared/graphs.utils'; -import { LightningApiService } from '../lightning-api.service'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { isMobile } from '../../shared/common.utils'; -import { StateService } from '../../services/state.service'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; +import { download } from '@app/shared/graphs.utils'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { isMobile } from '@app/shared/common.utils'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-lightning-statistics-chart', @@ -22,7 +22,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], }) diff --git a/frontend/src/app/liquid/liquid-graphs.module.ts b/frontend/src/app/liquid/liquid-graphs.module.ts index 3da93fc9d..9cfd7da83 100644 --- a/frontend/src/app/liquid/liquid-graphs.module.ts +++ b/frontend/src/app/liquid/liquid-graphs.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { LiquidMasterPageComponent } from '../components/liquid-master-page/liquid-master-page.component'; +import { LiquidMasterPageComponent } from '@components/liquid-master-page/liquid-master-page.component'; const routes: Routes = [ { diff --git a/frontend/src/app/liquid/liquid-master-page.module.ts b/frontend/src/app/liquid/liquid-master-page.module.ts index 5d5f0b8dd..17c2c8c41 100644 --- a/frontend/src/app/liquid/liquid-master-page.module.ts +++ b/frontend/src/app/liquid/liquid-master-page.module.ts @@ -1,25 +1,25 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { SharedModule } from '../shared/shared.module'; +import { SharedModule } from '@app/shared/shared.module'; import { NgxEchartsModule } from 'ngx-echarts'; -import { LiquidMasterPageComponent } from '../components/liquid-master-page/liquid-master-page.component'; +import { LiquidMasterPageComponent } from '@components/liquid-master-page/liquid-master-page.component'; -import { StartComponent } from '../components/start/start.component'; -import { PushTransactionComponent } from '../components/push-transaction/push-transaction.component'; -import { BlocksList } from '../components/blocks-list/blocks-list.component'; -import { AssetGroupComponent } from '../components/assets/asset-group/asset-group.component'; -import { AssetsComponent } from '../components/assets/assets.component'; -import { AssetsFeaturedComponent } from '../components/assets/assets-featured/assets-featured.component' -import { AssetComponent } from '../components/asset/asset.component'; -import { AssetsNavComponent } from '../components/assets/assets-nav/assets-nav.component'; -import { RecentPegsListComponent } from '../components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component'; -import { FederationWalletComponent } from '../components/liquid-reserves-audit/federation-wallet/federation-wallet.component'; -import { FederationUtxosListComponent } from '../components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component'; -import { FederationAddressesListComponent } from '../components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component'; -import { ServerHealthComponent } from '../components/server-health/server-health.component'; -import { ServerStatusComponent } from '../components/server-health/server-status.component'; +import { StartComponent } from '@components/start/start.component'; +import { PushTransactionComponent } from '@components/push-transaction/push-transaction.component'; +import { BlocksList } from '@components/blocks-list/blocks-list.component'; +import { AssetGroupComponent } from '@components/assets/asset-group/asset-group.component'; +import { AssetsComponent } from '@components/assets/assets.component'; +import { AssetsFeaturedComponent } from '@components/assets/assets-featured/assets-featured.component' +import { AssetComponent } from '@components/asset/asset.component'; +import { AssetsNavComponent } from '@components/assets/assets-nav/assets-nav.component'; +import { RecentPegsListComponent } from '@components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component'; +import { FederationWalletComponent } from '@components/liquid-reserves-audit/federation-wallet/federation-wallet.component'; +import { FederationUtxosListComponent } from '@components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component'; +import { FederationAddressesListComponent } from '@components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component'; +import { ServerHealthComponent } from '@components/server-health/server-health.component'; +import { ServerStatusComponent } from '@components/server-health/server-status.component'; const routes: Routes = [ { @@ -32,7 +32,7 @@ const routes: Routes = [ }, { path: 'about', - loadChildren: () => import('../components/about/about.module').then(m => m.AboutModule), + loadChildren: () => import('@components/about/about.module').then(m => m.AboutModule), }, { path: 'blocks/:page', @@ -44,27 +44,27 @@ const routes: Routes = [ }, { path: 'terms-of-service', - loadChildren: () => import('../components/terms-of-service/terms-of-service.module').then(m => m.TermsOfServiceModule), + loadChildren: () => import('@components/terms-of-service/terms-of-service.module').then(m => m.TermsOfServiceModule), }, { path: 'privacy-policy', - loadChildren: () => import('../components/privacy-policy/privacy-policy.module').then(m => m.PrivacyPolicyModule), + loadChildren: () => import('@components/privacy-policy/privacy-policy.module').then(m => m.PrivacyPolicyModule), }, { path: 'trademark-policy', - loadChildren: () => import('../components/trademark-policy/trademark-policy.module').then(m => m.TrademarkModule), + loadChildren: () => import('@components/trademark-policy/trademark-policy.module').then(m => m.TrademarkModule), }, { path: 'tx', component: StartComponent, data: { preload: true, networkSpecific: true }, - loadChildren: () => import('../components/transaction/transaction.module').then(m => m.TransactionModule), + loadChildren: () => import('@components/transaction/transaction.module').then(m => m.TransactionModule), }, { path: 'block', component: StartComponent, data: { preload: true, networkSpecific: true }, - loadChildren: () => import('../components/block/block.module').then(m => m.BlockModule), + loadChildren: () => import('@components/block/block.module').then(m => m.BlockModule), }, { path: 'audit/wallet', @@ -178,4 +178,4 @@ export class LiquidRoutingModule { } FederationUtxosListComponent, ] }) -export class LiquidMasterPageModule { } \ No newline at end of file +export class LiquidMasterPageModule { } diff --git a/frontend/src/app/master-page.module.ts b/frontend/src/app/master-page.module.ts index 510756cbc..2ee2e0bd8 100644 --- a/frontend/src/app/master-page.module.ts +++ b/frontend/src/app/master-page.module.ts @@ -1,18 +1,18 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; -import { MasterPageComponent } from './components/master-page/master-page.component'; -import { SharedModule } from './shared/shared.module'; +import { MasterPageComponent } from '@components/master-page/master-page.component'; +import { SharedModule } from '@app/shared/shared.module'; -import { StartComponent } from './components/start/start.component'; -import { PushTransactionComponent } from './components/push-transaction/push-transaction.component'; -import { TestTransactionsComponent } from './components/test-transactions/test-transactions.component'; -import { CalculatorComponent } from './components/calculator/calculator.component'; -import { BlocksList } from './components/blocks-list/blocks-list.component'; -import { RbfList } from './components/rbf-list/rbf-list.component'; -import { ServerHealthComponent } from './components/server-health/server-health.component'; -import { ServerStatusComponent } from './components/server-health/server-status.component'; -import { FaucetComponent } from './components/faucet/faucet.component' +import { StartComponent } from '@components/start/start.component'; +import { PushTransactionComponent } from '@components/push-transaction/push-transaction.component'; +import { TestTransactionsComponent } from '@components/test-transactions/test-transactions.component'; +import { CalculatorComponent } from '@components/calculator/calculator.component'; +import { BlocksList } from '@components/blocks-list/blocks-list.component'; +import { RbfList } from '@components/rbf-list/rbf-list.component'; +import { ServerHealthComponent } from '@components/server-health/server-health.component'; +import { ServerStatusComponent } from '@components/server-health/server-status.component'; +import { FaucetComponent } from '@components/faucet/faucet.component' const browserWindow = window || {}; // @ts-ignore @@ -42,7 +42,7 @@ const routes: Routes = [ }, { path: 'about', - loadChildren: () => import('./components/about/about.module').then(m => m.AboutModule), + loadChildren: () => import('@components/about/about.module').then(m => m.AboutModule), }, { path: 'blocks/:page', @@ -58,40 +58,40 @@ const routes: Routes = [ }, { path: 'terms-of-service', - loadChildren: () => import('./components/terms-of-service/terms-of-service.module').then(m => m.TermsOfServiceModule), + loadChildren: () => import('@components/terms-of-service/terms-of-service.module').then(m => m.TermsOfServiceModule), }, { path: 'privacy-policy', - loadChildren: () => import('./components/privacy-policy/privacy-policy.module').then(m => m.PrivacyPolicyModule), + loadChildren: () => import('@components/privacy-policy/privacy-policy.module').then(m => m.PrivacyPolicyModule), }, { path: 'trademark-policy', - loadChildren: () => import('./components/trademark-policy/trademark-policy.module').then(m => m.TrademarkModule), + loadChildren: () => import('@components/trademark-policy/trademark-policy.module').then(m => m.TrademarkModule), }, { path: 'tx', component: StartComponent, data: { preload: true, networkSpecific: true }, - loadChildren: () => import('./components/transaction/transaction.module').then(m => m.TransactionModule), + loadChildren: () => import('@components/transaction/transaction.module').then(m => m.TransactionModule), }, { path: 'block', component: StartComponent, data: { preload: true, networkSpecific: true }, - loadChildren: () => import('./components/block/block.module').then(m => m.BlockModule), + loadChildren: () => import('@components/block/block.module').then(m => m.BlockModule), }, { path: 'docs', - loadChildren: () => import('./docs/docs.module').then(m => m.DocsModule), + loadChildren: () => import('@app/docs/docs.module').then(m => m.DocsModule), data: { preload: true }, }, { path: 'api', - loadChildren: () => import('./docs/docs.module').then(m => m.DocsModule) + loadChildren: () => import('@app/docs/docs.module').then(m => m.DocsModule) }, { path: 'lightning', - loadChildren: () => import('./lightning/lightning.module').then(m => m.LightningModule), + loadChildren: () => import('@app/lightning/lightning.module').then(m => m.LightningModule), data: { preload: browserWindowEnv && browserWindowEnv.LIGHTNING === true, networks: ['bitcoin'] }, }, { diff --git a/frontend/src/app/previews.module.ts b/frontend/src/app/previews.module.ts index 95124f232..abfdced59 100644 --- a/frontend/src/app/previews.module.ts +++ b/frontend/src/app/previews.module.ts @@ -1,15 +1,15 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { SharedModule } from './shared/shared.module'; +import { SharedModule } from '@app/shared/shared.module'; import { RouterModule } from '@angular/router'; -import { GraphsModule } from './graphs/graphs.module'; +import { GraphsModule } from '@app/graphs/graphs.module'; import { PreviewsRoutingModule } from './previews.routing.module'; -import { TransactionPreviewComponent } from './components/transaction/transaction-preview.component'; -import { BlockPreviewComponent } from './components/block/block-preview.component'; -import { AddressPreviewComponent } from './components/address/address-preview.component'; -import { PoolPreviewComponent } from './components/pool/pool-preview.component'; -import { MasterPagePreviewComponent } from './components/master-page-preview/master-page-preview.component'; -import { TxBowtieModule } from './components/tx-bowtie-graph/tx-bowtie.module'; +import { TransactionPreviewComponent } from '@components/transaction/transaction-preview.component'; +import { BlockPreviewComponent } from '@components/block/block-preview.component'; +import { AddressPreviewComponent } from '@components/address/address-preview.component'; +import { PoolPreviewComponent } from '@components/pool/pool-preview.component'; +import { MasterPagePreviewComponent } from '@components/master-page-preview/master-page-preview.component'; +import { TxBowtieModule } from '@components/tx-bowtie-graph/tx-bowtie.module'; @NgModule({ declarations: [ TransactionPreviewComponent, diff --git a/frontend/src/app/previews.routing.module.ts b/frontend/src/app/previews.routing.module.ts index 6ac44a370..92ea113b8 100644 --- a/frontend/src/app/previews.routing.module.ts +++ b/frontend/src/app/previews.routing.module.ts @@ -1,10 +1,10 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { TransactionPreviewComponent } from './components/transaction/transaction-preview.component'; -import { BlockPreviewComponent } from './components/block/block-preview.component'; -import { AddressPreviewComponent } from './components/address/address-preview.component'; -import { PoolPreviewComponent } from './components/pool/pool-preview.component'; -import { MasterPagePreviewComponent } from './components/master-page-preview/master-page-preview.component'; +import { TransactionPreviewComponent } from '@components/transaction/transaction-preview.component'; +import { BlockPreviewComponent } from '@components/block/block-preview.component'; +import { AddressPreviewComponent } from '@components/address/address-preview.component'; +import { PoolPreviewComponent } from '@components/pool/pool-preview.component'; +import { MasterPagePreviewComponent } from '@components/master-page-preview/master-page-preview.component'; const routes: Routes = [ { @@ -31,7 +31,7 @@ const routes: Routes = [ }, { path: 'lightning', - loadChildren: () => import('./lightning/lightning-previews.module').then(m => m.LightningPreviewsModule), + loadChildren: () => import('@app/lightning/lightning-previews.module').then(m => m.LightningPreviewsModule), data: { preload: true }, }, ], diff --git a/frontend/src/app/route-guards.ts b/frontend/src/app/route-guards.ts new file mode 100644 index 000000000..780e997db --- /dev/null +++ b/frontend/src/app/route-guards.ts @@ -0,0 +1,23 @@ +import { Injectable, inject } from '@angular/core'; +import { CanMatchFn, Route, Router, UrlSegment } from '@angular/router'; +import { NavigationService } from '@app/services/navigation.service'; + +@Injectable({ + providedIn: 'root' +}) +class GuardService { + constructor( + private router: Router, + private navigationService: NavigationService, + ) {} + + trackerGuard(route: Route, segments: UrlSegment[]): boolean { + const preferredRoute = this.router.getCurrentNavigation()?.extractedUrl.queryParams?.mode; + const path = this.router.getCurrentNavigation()?.extractedUrl.root.children.primary.segments; + return (preferredRoute === 'status' || (preferredRoute !== 'details' && this.navigationService.isInitialLoad())) && window.innerWidth <= 767.98 && !(path.length === 2 && ['push', 'test'].includes(path[1].path)); + } +} + +export const TrackerGuard: CanMatchFn = (route: Route, segments: UrlSegment[]): boolean => { + return inject(GuardService).trackerGuard(route, segments); +}; diff --git a/frontend/src/app/services/api.service.ts b/frontend/src/app/services/api.service.ts index ef0c87570..3c8cf8807 100644 --- a/frontend/src/app/services/api.service.ts +++ b/frontend/src/app/services/api.service.ts @@ -1,14 +1,14 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http'; import { CpfpInfo, OptimizedMempoolStats, AddressInformation, LiquidPegs, ITranslators, PoolStat, BlockExtended, TransactionStripped, RewardStats, AuditScore, BlockSizesAndWeights, - RbfTree, BlockAudit, CurrentPegs, AuditStatus, FederationAddress, FederationUtxo, RecentPeg, PegsVolume, AccelerationInfo, TestMempoolAcceptResult, WalletAddress } from '../interfaces/node-api.interface'; + RbfTree, BlockAudit, CurrentPegs, AuditStatus, FederationAddress, FederationUtxo, RecentPeg, PegsVolume, AccelerationInfo, TestMempoolAcceptResult, WalletAddress, SubmitPackageResult } from '../interfaces/node-api.interface'; import { BehaviorSubject, Observable, catchError, filter, map, of, shareReplay, take, tap } from 'rxjs'; -import { StateService } from './state.service'; -import { Transaction } from '../interfaces/electrs.interface'; -import { Conversion } from './price.service'; -import { StorageService } from './storage.service'; -import { WebsocketResponse } from '../interfaces/websocket.interface'; -import { TxAuditStatus } from '../components/transaction/transaction.component'; +import { StateService } from '@app/services/state.service'; +import { Transaction } from '@interfaces/electrs.interface'; +import { Conversion } from '@app/services/price.service'; +import { StorageService } from '@app/services/storage.service'; +import { WebsocketResponse } from '@interfaces/websocket.interface'; +import { TxAuditStatus } from '@components/transaction/transaction.component'; @Injectable({ providedIn: 'root' @@ -18,6 +18,7 @@ export class ApiService { private apiBasePath: string; // network path is /testnet, etc. or '' for mainnet private requestCache = new Map, expiry: number }>; + public blockSummaryLoaded: { [hash: string]: boolean } = {}; public blockAuditLoaded: { [hash: string]: boolean } = {}; constructor( @@ -244,6 +245,19 @@ export class ApiService { return this.httpClient.post(this.apiBaseUrl + this.apiBasePath + `/api/txs/test${maxfeerate != null ? '?maxfeerate=' + maxfeerate.toFixed(8) : ''}`, rawTxs); } + submitPackage$(rawTxs: string[], maxfeerate?: number, maxburnamount?: number): Observable { + const queryParams = []; + + if (maxfeerate) { + queryParams.push(`maxfeerate=${maxfeerate}`); + } + + if (maxburnamount) { + queryParams.push(`maxburnamount=${maxburnamount}`); + } + return this.httpClient.post(this.apiBaseUrl + this.apiBasePath + '/api/v1/txs/package' + (queryParams.length > 0 ? `?${queryParams.join('&')}` : ''), rawTxs); + } + getTransactionStatus$(txid: string): Observable { return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/tx/' + txid + '/status'); } @@ -305,9 +319,14 @@ export class ApiService { } getStrippedBlockTransactions$(hash: string): Observable { + this.setBlockSummaryLoaded(hash); return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/v1/block/' + hash + '/summary'); } + getStrippedBlockTransaction$(hash: string, txid: string): Observable { + return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/v1/block/' + hash + '/tx/' + txid + '/summary'); + } + getDifficultyAdjustments$(interval: string | undefined): Observable { return this.httpClient.get( this.apiBaseUrl + this.apiBasePath + `/api/v1/mining/difficulty-adjustments` + @@ -554,4 +573,12 @@ export class ApiService { getBlockAuditLoaded(hash) { return this.blockAuditLoaded[hash]; } + + async setBlockSummaryLoaded(hash: string) { + this.blockSummaryLoaded[hash] = true; + } + + getBlockSummaryLoaded(hash) { + return this.blockSummaryLoaded[hash]; + } } diff --git a/frontend/src/app/services/assets.service.ts b/frontend/src/app/services/assets.service.ts index 9c6b5dba0..bb8756bd7 100644 --- a/frontend/src/app/services/assets.service.ts +++ b/frontend/src/app/services/assets.service.ts @@ -2,9 +2,9 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { map, shareReplay, switchMap } from 'rxjs/operators'; -import { StateService } from './state.service'; -import { environment } from '../../../src/environments/environment'; -import { AssetExtended } from '../interfaces/electrs.interface'; +import { StateService } from '@app/services/state.service'; +import { environment } from '@environments/environment'; +import { AssetExtended } from '@interfaces/electrs.interface'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/auth.service.ts b/frontend/src/app/services/auth.service.ts index 100ddbdc4..db910779e 100644 --- a/frontend/src/app/services/auth.service.ts +++ b/frontend/src/app/services/auth.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { Router } from '@angular/router'; import { catchError, map, Observable, of, ReplaySubject, switchMap, tap } from 'rxjs'; -import { ServicesApiServices } from './services-api.service'; +import { ServicesApiServices } from '@app/services/services-api.service'; export interface IAuth { token: string; diff --git a/frontend/src/app/services/cache.service.ts b/frontend/src/app/services/cache.service.ts index f15154b46..246008043 100644 --- a/frontend/src/app/services/cache.service.ts +++ b/frontend/src/app/services/cache.service.ts @@ -1,9 +1,9 @@ import { Injectable } from '@angular/core'; import { firstValueFrom, Subject, Subscription} from 'rxjs'; -import { Transaction } from '../interfaces/electrs.interface'; -import { BlockExtended } from '../interfaces/node-api.interface'; -import { StateService } from './state.service'; -import { ApiService } from './api.service'; +import { Transaction } from '@interfaces/electrs.interface'; +import { BlockExtended } from '@interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { ApiService } from '@app/services/api.service'; const BLOCK_CACHE_SIZE = 500; const KEEP_RECENT_BLOCKS = 50; @@ -133,4 +133,4 @@ export class CacheService { getCachedBlock(height) { return this.blockCache[height]; } -} \ No newline at end of file +} diff --git a/frontend/src/app/services/electrs-api.service.ts b/frontend/src/app/services/electrs-api.service.ts index 7faaea87c..3cd5b5abd 100644 --- a/frontend/src/app/services/electrs-api.service.ts +++ b/frontend/src/app/services/electrs-api.service.ts @@ -1,10 +1,10 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; import { BehaviorSubject, Observable, catchError, filter, from, of, shareReplay, switchMap, take, tap } from 'rxjs'; -import { Transaction, Address, Outspend, Recent, Asset, ScriptHash, AddressTxSummary } from '../interfaces/electrs.interface'; -import { StateService } from './state.service'; -import { BlockExtended } from '../interfaces/node-api.interface'; -import { calcScriptHash$ } from '../bitcoin.utils'; +import { Transaction, Address, Outspend, Recent, Asset, ScriptHash, AddressTxSummary, Utxo } from '../interfaces/electrs.interface'; +import { StateService } from '@app/services/state.service'; +import { BlockExtended } from '@interfaces/node-api.interface'; +import { calcScriptHash$ } from '@app/bitcoin.utils'; @Injectable({ providedIn: 'root' @@ -107,6 +107,10 @@ export class ElectrsApiService { return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/block-height/' + height, {responseType: 'text'}); } + getBlockTxId$(hash: string, index: number): Observable { + return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/block/' + hash + '/txid/' + index, { responseType: 'text' }); + } + getAddress$(address: string): Observable

{ return this.httpClient.get
(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address); } @@ -138,6 +142,14 @@ export class ElectrsApiService { return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address + '/txs', { params }); } + getAddressesTransactions$(addresses: string[], txid?: string): Observable { + let params = new HttpParams(); + if (txid) { + params = params.append('after_txid', txid); + } + return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + `/api/addresses/txs?addresses=${addresses.join(',')}`, { params }); + } + getAddressSummary$(address: string, txid?: string): Observable { let params = new HttpParams(); if (txid) { @@ -146,6 +158,14 @@ export class ElectrsApiService { return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address + '/txs/summary', { params }); } + getAddressesSummary$(addresses: string[], txid?: string): Observable { + let params = new HttpParams(); + if (txid) { + params = params.append('after_txid', txid); + } + return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + `/api/addresses/txs/summary?addresses=${addresses.join(',')}`, { params }); + } + getScriptHashTransactions$(script: string, txid?: string): Observable { let params = new HttpParams(); if (txid) { @@ -156,6 +176,16 @@ export class ElectrsApiService { ); } + getScriptHashesTransactions$(scripts: string[], txid?: string): Observable { + let params = new HttpParams(); + if (txid) { + params = params.append('after_txid', txid); + } + return from(Promise.all(scripts.map(script => calcScriptHash$(script)))).pipe( + switchMap(scriptHashes => this.httpClient.get(this.apiBaseUrl + this.apiBasePath + `/api/scripthashes/txs?scripthashes=${scriptHashes.join(',')}`, { params })), + ); + } + getScriptHashSummary$(script: string, txid?: string): Observable { let params = new HttpParams(); if (txid) { @@ -166,6 +196,26 @@ export class ElectrsApiService { ); } + getAddressUtxos$(address: string): Observable { + return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address + '/utxo'); + } + + getScriptHashUtxos$(script: string): Observable { + return from(calcScriptHash$(script)).pipe( + switchMap(scriptHash => this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/scripthash/' + scriptHash + '/utxo')), + ); + } + + getScriptHashesSummary$(scripts: string[], txid?: string): Observable { + let params = new HttpParams(); + if (txid) { + params = params.append('after_txid', txid); + } + return from(Promise.all(scripts.map(script => calcScriptHash$(script)))).pipe( + switchMap(scriptHashes => this.httpClient.get(this.apiBaseUrl + this.apiBasePath + `/api/scripthashes/txs/summary?scripthashes=${scriptHashes.join(',')}`, { params })), + ); + } + getAsset$(assetId: string): Observable { return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/asset/' + assetId); } diff --git a/frontend/src/app/services/enterprise.service.ts b/frontend/src/app/services/enterprise.service.ts index f9549cc8a..d7695b94f 100644 --- a/frontend/src/app/services/enterprise.service.ts +++ b/frontend/src/app/services/enterprise.service.ts @@ -1,8 +1,8 @@ import { DOCUMENT } from '@angular/common'; import { Inject, Injectable } from '@angular/core'; -import { ApiService } from './api.service'; -import { SeoService } from './seo.service'; -import { StateService } from './state.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { StateService } from '@app/services/state.service'; import { ActivatedRoute } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; @@ -30,7 +30,6 @@ export class EnterpriseService { this.fetchSubdomainInfo(); this.disableSubnetworks(); this.stateService.env.ACCELERATOR = false; - this.stateService.env.ACCELERATOR_BUTTON = false; } else { this.insertMatomo(); } diff --git a/frontend/src/app/services/eta.service.ts b/frontend/src/app/services/eta.service.ts index f632c9adb..cf7719327 100644 --- a/frontend/src/app/services/eta.service.ts +++ b/frontend/src/app/services/eta.service.ts @@ -1,11 +1,11 @@ import { Injectable } from '@angular/core'; -import { AccelerationPosition, CpfpInfo, DifficultyAdjustment, MempoolPosition, SinglePoolStats } from '../interfaces/node-api.interface'; -import { StateService } from './state.service'; -import { MempoolBlock } from '../interfaces/websocket.interface'; -import { Transaction } from '../interfaces/electrs.interface'; -import { MiningService, MiningStats } from './mining.service'; -import { getUnacceleratedFeeRate } from '../shared/transaction.utils'; -import { AccelerationEstimate } from '../components/accelerate-checkout/accelerate-checkout.component'; +import { AccelerationPosition, CpfpInfo, DifficultyAdjustment, MempoolPosition, SinglePoolStats } from '@interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { MempoolBlock } from '@interfaces/websocket.interface'; +import { Transaction } from '@interfaces/electrs.interface'; +import { MiningService, MiningStats } from '@app/services/mining.service'; +import { getUnacceleratedFeeRate } from '@app/shared/transaction.utils'; +import { AccelerationEstimate } from '@components/accelerate-checkout/accelerate-checkout.component'; import { Observable, combineLatest, map, of, share, shareReplay, tap } from 'rxjs'; export interface ETA { @@ -28,7 +28,7 @@ export class EtaService { return combineLatest([ this.stateService.mempoolTxPosition$.pipe(map(p => p?.position)), this.stateService.difficultyAdjustment$, - miningStats ? of(miningStats) : this.miningService.getMiningStats('1w'), + miningStats ? of(miningStats) : this.miningService.getMiningStats('1m'), ]).pipe( map(([mempoolPosition, da, miningStats]) => { if (!mempoolPosition || !estimate?.pools?.length || !miningStats || !da) { @@ -166,7 +166,7 @@ export class EtaService { pools[pool.poolUniqueId] = pool; } const unacceleratedPosition = this.mempoolPositionFromFees(getUnacceleratedFeeRate(tx, true), mempoolBlocks); - const totalAcceleratedHashrate = accelerationPositions.reduce((total, pos) => total + (pools[pos.poolId].lastEstimatedHashrate), 0); + const totalAcceleratedHashrate = accelerationPositions.reduce((total, pos) => total + (pools[pos.poolId]?.lastEstimatedHashrate || 0), 0); const shares = [ { block: unacceleratedPosition.block, @@ -174,7 +174,7 @@ export class EtaService { }, ...accelerationPositions.map(pos => ({ block: pos.block, - hashrateShare: ((pools[pos.poolId].lastEstimatedHashrate) / miningStats.lastEstimatedHashrate) + hashrateShare: ((pools[pos.poolId]?.lastEstimatedHashrate || 0) / miningStats.lastEstimatedHashrate) })) ]; return this.calculateETAFromShares(shares, da); @@ -204,7 +204,7 @@ export class EtaService { let tailProb = 0; let Q = 0; - for (let i = 0; i < max; i++) { + for (let i = 0; i <= max; i++) { // find H_i const H = shares.reduce((total, share) => total + (share.block <= i ? share.hashrateShare : 0), 0); // find S_i @@ -215,7 +215,7 @@ export class EtaService { tailProb += S; } // at max depth, the transaction is guaranteed to be mined in the next block if it hasn't already - Q += (1-tailProb); + Q += ((max + 1) * (1-tailProb)); const eta = da.timeAvg * Q; // T x Q return { diff --git a/frontend/src/app/services/language.service.ts b/frontend/src/app/services/language.service.ts index 58ba94a00..b0d2f247c 100644 --- a/frontend/src/app/services/language.service.ts +++ b/frontend/src/app/services/language.service.ts @@ -1,6 +1,6 @@ import { DOCUMENT, getLocaleId } from '@angular/common'; import { LOCALE_ID, Inject, Injectable } from '@angular/core'; -import { languages } from '../app.constants'; +import { languages } from '@app/app.constants'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/mining.service.ts b/frontend/src/app/services/mining.service.ts index 7bbf6b759..760ce93cb 100644 --- a/frontend/src/app/services/mining.service.ts +++ b/frontend/src/app/services/mining.service.ts @@ -1,10 +1,10 @@ import { Injectable } from '@angular/core'; import { Observable, of } from 'rxjs'; import { map, tap } from 'rxjs/operators'; -import { PoolsStats, SinglePoolStats } from '../interfaces/node-api.interface'; -import { ApiService } from '../services/api.service'; -import { StateService } from './state.service'; -import { StorageService } from './storage.service'; +import { PoolsStats, SinglePoolStats } from '@interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { StorageService } from '@app/services/storage.service'; export interface MiningUnits { hashrateDivider: number; @@ -13,6 +13,8 @@ export interface MiningUnits { export interface MiningStats { lastEstimatedHashrate: number; + lastEstimatedHashrate3d: number; + lastEstimatedHashrate1w: number; blockCount: number; totalEmptyBlock: number; totalEmptyBlockRatio: string; @@ -31,12 +33,17 @@ export class MiningService { data: MiningStats; } } = {}; + poolsData: SinglePoolStats[] = []; constructor( private stateService: StateService, private apiService: ApiService, private storageService: StorageService, - ) { } + ) { + this.stateService.networkChanged$.subscribe((network) => { + this.clearCache(); + }); + } /** * Generate pool ranking stats @@ -57,7 +64,19 @@ export class MiningService { ); } } - + + /** + * Get names and slugs of all pools + */ + public getPools(): Observable { + return this.poolsData.length ? of(this.poolsData) : this.apiService.listPools$(undefined).pipe( + map(response => { + this.poolsData = response.body; + return this.poolsData; + }) + ); + + } /** * Set the hashrate power of ten we want to display */ @@ -112,6 +131,8 @@ export class MiningService { return { share: parseFloat((poolStat.blockCount / stats.blockCount * 100).toFixed(2)), lastEstimatedHashrate: poolStat.blockCount / stats.blockCount * stats.lastEstimatedHashrate / hashrateDivider, + lastEstimatedHashrate3d: poolStat.blockCount / stats.blockCount * stats.lastEstimatedHashrate3d / hashrateDivider, + lastEstimatedHashrate1w: poolStat.blockCount / stats.blockCount * stats.lastEstimatedHashrate1w / hashrateDivider, emptyBlockRatio: (poolStat.emptyBlocks / poolStat.blockCount * 100).toFixed(2), logo: `/resources/mining-pools/` + poolStat.slug + '.svg', ...poolStat @@ -120,6 +141,8 @@ export class MiningService { return { lastEstimatedHashrate: stats.lastEstimatedHashrate / hashrateDivider, + lastEstimatedHashrate3d: stats.lastEstimatedHashrate3d / hashrateDivider, + lastEstimatedHashrate1w: stats.lastEstimatedHashrate1w / hashrateDivider, blockCount: stats.blockCount, totalEmptyBlock: totalEmptyBlock, totalEmptyBlockRatio: totalEmptyBlockRatio, @@ -128,4 +151,9 @@ export class MiningService { totalBlockCount: parseInt(response.headers.get('x-total-count'), 10), }; } + + private clearCache(): void { + this.cache = {}; + this.poolsData = []; + } } diff --git a/frontend/src/app/services/navigation.service.ts b/frontend/src/app/services/navigation.service.ts index 57f7f84dd..c1b32739a 100644 --- a/frontend/src/app/services/navigation.service.ts +++ b/frontend/src/app/services/navigation.service.ts @@ -2,8 +2,8 @@ import { Injectable } from '@angular/core'; import { Router, NavigationEnd, ActivatedRouteSnapshot } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; import { filter, map } from 'rxjs/operators'; -import { StateService } from './state.service'; -import { RelativeUrlPipe } from '../shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; @Injectable({ providedIn: 'root' @@ -27,6 +27,7 @@ export class NavigationService { } }; networks = Object.keys(this.networkModules); + initialLoad = true; constructor( private stateService: StateService, @@ -40,6 +41,10 @@ export class NavigationService { if (this.enforceSubnetRestrictions(state)) { this.updateSubnetPaths(state); } + if (this.initialLoad) { + this.initialLoad = false; + } + this.updateSubnetPaths(state); }); } @@ -98,4 +103,8 @@ export class NavigationService { }); this.subnetPaths.next(subnetPaths); } + + isInitialLoad(): boolean { + return this.initialLoad; + } } diff --git a/frontend/src/app/services/opengraph.service.ts b/frontend/src/app/services/opengraph.service.ts index 5e429ed70..e969dd07a 100644 --- a/frontend/src/app/services/opengraph.service.ts +++ b/frontend/src/app/services/opengraph.service.ts @@ -3,8 +3,8 @@ import { Meta } from '@angular/platform-browser'; import { Router, ActivatedRoute, NavigationEnd } from '@angular/router'; import { filter, map, switchMap } from 'rxjs/operators'; import { combineLatest } from 'rxjs'; -import { StateService } from './state.service'; -import { LanguageService } from './language.service'; +import { StateService } from '@app/services/state.service'; +import { LanguageService } from '@app/services/language.service'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/ord-api.service.ts b/frontend/src/app/services/ord-api.service.ts new file mode 100644 index 000000000..ae0076906 --- /dev/null +++ b/frontend/src/app/services/ord-api.service.ts @@ -0,0 +1,100 @@ +import { Injectable } from '@angular/core'; +import { catchError, forkJoin, map, Observable, of, switchMap, tap } from 'rxjs'; +import { Inscription } from '@app/shared/ord/inscription.utils'; +import { Transaction } from '@interfaces/electrs.interface'; +import { getNextInscriptionMark, hexToBytes, extractInscriptionData } from '@app/shared/ord/inscription.utils'; +import { decipherRunestone, Runestone, Etching, UNCOMMON_GOODS } from '@app/shared/ord/rune.utils'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; + + +@Injectable({ + providedIn: 'root' +}) +export class OrdApiService { + + constructor( + private electrsApiService: ElectrsApiService, + ) { } + + decodeRunestone$(tx: Transaction): Observable<{ runestone: Runestone, runeInfo: { [id: string]: { etching: Etching; txid: string; } } }> { + const runestone = decipherRunestone(tx); + const runeInfo: { [id: string]: { etching: Etching; txid: string; } } = {}; + + if (runestone) { + const runesToFetch: Set = new Set(); + + if (runestone.mint) { + runesToFetch.add(runestone.mint.toString()); + } + + if (runestone.edicts.length) { + runestone.edicts.forEach(edict => { + runesToFetch.add(edict.id.toString()); + }); + } + + if (runesToFetch.size) { + const runeEtchingObservables = Array.from(runesToFetch).map(runeId => this.getEtchingFromRuneId$(runeId)); + + return forkJoin(runeEtchingObservables).pipe( + map((etchings) => { + etchings.forEach((el) => { + if (el) { + runeInfo[el.runeId] = { etching: el.etching, txid: el.txid }; + } + }); + return { runestone: runestone, runeInfo }; + }) + ); + } + return of({ runestone: runestone, runeInfo }); + } else { + return of({ runestone: null, runeInfo: {} }); + } + } + + // Get etching from runeId by looking up the transaction that etched the rune + getEtchingFromRuneId$(runeId: string): Observable<{ runeId: string; etching: Etching; txid: string; }> { + if (runeId === '1:0') { + return of({ runeId, etching: UNCOMMON_GOODS, txid: '0000000000000000000000000000000000000000000000000000000000000000' }); + } else { + const [blockNumber, txIndex] = runeId.split(':'); + return this.electrsApiService.getBlockHashFromHeight$(parseInt(blockNumber)).pipe( + switchMap(blockHash => this.electrsApiService.getBlockTxId$(blockHash, parseInt(txIndex))), + switchMap(txId => this.electrsApiService.getTransaction$(txId)), + switchMap(tx => { + const runestone = decipherRunestone(tx); + if (runestone) { + const etching = runestone.etching; + if (etching) { + return of({ runeId, etching, txid: tx.txid }); + } + } + return of(null); + }), + catchError(() => of(null)) + ); + } + } + + decodeInscriptions(witness: string): Inscription[] | null { + + const inscriptions: Inscription[] = []; + const raw = hexToBytes(witness); + let startPosition = 0; + + while (true) { + const pointer = getNextInscriptionMark(raw, startPosition); + if (pointer === -1) break; + + const inscription = extractInscriptionData(raw, pointer); + if (inscription) { + inscriptions.push(inscription); + } + + startPosition = pointer; + } + + return inscriptions; + } +} diff --git a/frontend/src/app/services/preload.service.ts b/frontend/src/app/services/preload.service.ts index 386d4deb4..2fce9b98c 100644 --- a/frontend/src/app/services/preload.service.ts +++ b/frontend/src/app/services/preload.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { ElectrsApiService } from '../services/electrs-api.service'; import { Subject, debounceTime, switchMap } from 'rxjs'; -import { ApiService } from './api.service'; +import { ApiService } from '@app/services/api.service'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/price.service.ts b/frontend/src/app/services/price.service.ts index c342796e0..e5a0c86c8 100644 --- a/frontend/src/app/services/price.service.ts +++ b/frontend/src/app/services/price.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { map, Observable, of, share, shareReplay, tap } from 'rxjs'; -import { ApiService } from './api.service'; -import { StateService } from './state.service'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; // nodejs backend interfaces export interface ApiPrice { @@ -320,4 +320,4 @@ export class PriceService { return prices; })); } -} \ No newline at end of file +} diff --git a/frontend/src/app/services/seo.service.ts b/frontend/src/app/services/seo.service.ts index af12e8b47..e5ede4db3 100644 --- a/frontend/src/app/services/seo.service.ts +++ b/frontend/src/app/services/seo.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; import { Title, Meta } from '@angular/platform-browser'; import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; import { filter, map, switchMap } from 'rxjs'; -import { StateService } from './state.service'; +import { StateService } from '@app/services/state.service'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/services-api.service.ts b/frontend/src/app/services/services-api.service.ts index c26075198..2ecfe06ff 100644 --- a/frontend/src/app/services/services-api.service.ts +++ b/frontend/src/app/services/services-api.service.ts @@ -1,21 +1,20 @@ import { Router, NavigationStart } from '@angular/router'; import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; -import { StateService } from './state.service'; -import { StorageService } from './storage.service'; -import { MenuGroup } from '../interfaces/services.interface'; -import { Observable, of, ReplaySubject, tap, catchError, share, filter, switchMap } from 'rxjs'; -import { IBackendInfo } from '../interfaces/websocket.interface'; -import { Acceleration, AccelerationHistoryParams } from '../interfaces/node-api.interface'; -import { AccelerationStats } from '../components/acceleration/acceleration-stats/acceleration-stats.component'; +import { StateService } from '@app/services/state.service'; +import { StorageService } from '@app/services/storage.service'; +import { MenuGroup } from '@interfaces/services.interface'; +import { Observable, of, ReplaySubject, tap, catchError, share, filter, switchMap, map } from 'rxjs'; +import { IBackendInfo } from '@interfaces/websocket.interface'; +import { Acceleration, AccelerationHistoryParams } from '@interfaces/node-api.interface'; +import { AccelerationStats } from '@components/acceleration/acceleration-stats/acceleration-stats.component'; -export type ProductType = 'enterprise' | 'community' | 'mining_pool' | 'custom'; export interface IUser { username: string; email: string | null; passwordIsSet: boolean; snsId: string; - type: ProductType; + type: 'enterprise' | 'community' | 'mining_pool'; subscription_tag: string; status: 'pending' | 'verified' | 'disabled'; features: string | null; @@ -118,6 +117,9 @@ export class ServicesApiServices { } getJWT$() { + if (!this.stateService.env.OFFICIAL_MEMPOOL_SPACE) { + return of(null); + } return this.httpClient.get(`${this.stateService.env.SERVICES_API}/auth/getJWT`); } @@ -129,16 +131,20 @@ export class ServicesApiServices { return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/estimate`, { txInput: txInput }, { observe: 'response' }); } - accelerate$(txInput: string, userBid: number, accelerationUUID: string) { - return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate`, { txInput: txInput, userBid: userBid, accelerationUUID: accelerationUUID }); + accelerate$(txInput: string, userBid: number) { + return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate`, { txInput: txInput, userBid: userBid}); } - accelerateWithCashApp$(txInput: string, token: string, cashtag: string, referenceId: string, accelerationUUID: string) { - return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/cashapp`, { txInput: txInput, token: token, cashtag: cashtag, referenceId: referenceId, accelerationUUID: accelerationUUID }); + accelerateWithCashApp$(txInput: string, token: string, cashtag: string, referenceId: string, userApprovedUSD: number) { + return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/cashapp`, { txInput: txInput, token: token, cashtag: cashtag, referenceId: referenceId, userApprovedUSD: userApprovedUSD }); } - accelerateWithApplePay$(txInput: string, token: string, cardTag: string, referenceId: string, accelerationUUID: string) { - return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/applePay`, { txInput: txInput, cardTag: cardTag, token: token, referenceId: referenceId, accelerationUUID: accelerationUUID }); + accelerateWithApplePay$(txInput: string, token: string, cardTag: string, referenceId: string, userApprovedUSD: number) { + return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/applePay`, { txInput: txInput, cardTag: cardTag, token: token, referenceId: referenceId, userApprovedUSD: userApprovedUSD }); + } + + accelerateWithGooglePay$(txInput: string, token: string, cardTag: string, referenceId: string, userApprovedUSD: number) { + return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/googlePay`, { txInput: txInput, cardTag: cardTag, token: token, referenceId: referenceId, userApprovedUSD: userApprovedUSD }); } getAccelerations$(): Observable { @@ -153,6 +159,29 @@ export class ServicesApiServices { return this.httpClient.get(`${this.stateService.env.SERVICES_API}/accelerator/accelerations/history`, { params: { ...params } }); } + getAllAccelerationHistory$(params: AccelerationHistoryParams, limit?: number, findTxid?: string): Observable { + const getPage$ = (page: number, accelerations: Acceleration[] = []): Observable<{ page: number, total: number, accelerations: Acceleration[] }> => { + return this.getAccelerationHistoryObserveResponse$({...params, page}).pipe( + map((response) => ({ + page, + total: parseInt(response.headers.get('X-Total-Count'), 10) || 0, + accelerations: accelerations.concat(response.body || []), + })), + switchMap(({page, total, accelerations}) => { + if (accelerations.length >= Math.min(total, limit ?? Infinity) || (findTxid && accelerations.find((acc) => acc.txid === findTxid))) { + return of({ page, total, accelerations }); + } else { + return getPage$(page + 1, accelerations); + } + }), + ); + }; + + return getPage$(1).pipe( + map(({ accelerations }) => accelerations), + ); + } + getAccelerationHistoryObserveResponse$(params: AccelerationHistoryParams): Observable { return this.httpClient.get(`${this.stateService.env.SERVICES_API}/accelerator/accelerations/history`, { params: { ...params }, observe: 'response'}); } diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index ecc67fc34..2feb266d1 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -1,14 +1,14 @@ import { Inject, Injectable, PLATFORM_ID, LOCALE_ID } from '@angular/core'; import { ReplaySubject, BehaviorSubject, Subject, fromEvent, Observable } from 'rxjs'; -import { AddressTxSummary, Transaction } from '../interfaces/electrs.interface'; -import { AccelerationDelta, HealthCheckHost, IBackendInfo, MempoolBlock, MempoolBlockUpdate, MempoolInfo, Recommendedfees, ReplacedTransaction, ReplacementInfo, isMempoolState } from '../interfaces/websocket.interface'; -import { Acceleration, AccelerationPosition, BlockExtended, CpfpInfo, DifficultyAdjustment, MempoolPosition, OptimizedMempoolStats, RbfTree, TransactionStripped } from '../interfaces/node-api.interface'; +import { AddressTxSummary, Transaction } from '@interfaces/electrs.interface'; +import { AccelerationDelta, HealthCheckHost, IBackendInfo, MempoolBlock, MempoolBlockUpdate, MempoolInfo, Recommendedfees, ReplacedTransaction, ReplacementInfo, isMempoolState } from '@interfaces/websocket.interface'; +import { Acceleration, AccelerationPosition, BlockExtended, CpfpInfo, DifficultyAdjustment, MempoolPosition, OptimizedMempoolStats, RbfTree, TransactionStripped } from '@interfaces/node-api.interface'; import { Router, NavigationStart } from '@angular/router'; import { isPlatformBrowser } from '@angular/common'; -import { filter, map, scan, shareReplay } from 'rxjs/operators'; -import { StorageService } from './storage.service'; -import { hasTouchScreen } from '../shared/pipes/bytes-pipe/utils'; -import { ActiveFilter } from '../shared/filters.utils'; +import { filter, map, scan, share, shareReplay } from 'rxjs/operators'; +import { StorageService } from '@app/services/storage.service'; +import { hasTouchScreen } from '@app/shared/pipes/bytes-pipe/utils'; +import { ActiveFilter } from '@app/shared/filters.utils'; export interface MarkBlockState { blockHeight?: number; @@ -68,7 +68,12 @@ export interface Env { AUDIT: boolean; MAINNET_BLOCK_AUDIT_START_HEIGHT: number; TESTNET_BLOCK_AUDIT_START_HEIGHT: number; + TESTNET4_BLOCK_AUDIT_START_HEIGHT: number; SIGNET_BLOCK_AUDIT_START_HEIGHT: number; + MAINNET_TX_FIRST_SEEN_START_HEIGHT: number; + TESTNET_TX_FIRST_SEEN_START_HEIGHT: number; + TESTNET4_TX_FIRST_SEEN_START_HEIGHT: number; + SIGNET_TX_FIRST_SEEN_START_HEIGHT: number; HISTORICAL_PRICE: boolean; ACCELERATOR: boolean; ACCELERATOR_BUTTON: boolean; @@ -78,6 +83,7 @@ export interface Env { PACKAGE_JSON_VERSION_MEMPOOL_SPACE?: string; SERVICES_API?: string; customize?: Customization; + PROD_DOMAINS: string[]; } const defaultEnv: Env = { @@ -106,13 +112,19 @@ const defaultEnv: Env = { 'AUDIT': false, 'MAINNET_BLOCK_AUDIT_START_HEIGHT': 0, 'TESTNET_BLOCK_AUDIT_START_HEIGHT': 0, + 'TESTNET4_BLOCK_AUDIT_START_HEIGHT': 0, 'SIGNET_BLOCK_AUDIT_START_HEIGHT': 0, + 'MAINNET_TX_FIRST_SEEN_START_HEIGHT': 0, + 'TESTNET_TX_FIRST_SEEN_START_HEIGHT': 0, + 'TESTNET4_TX_FIRST_SEEN_START_HEIGHT': 0, + 'SIGNET_TX_FIRST_SEEN_START_HEIGHT': 0, 'HISTORICAL_PRICE': true, 'ACCELERATOR': false, 'ACCELERATOR_BUTTON': true, 'PUBLIC_ACCELERATIONS': false, 'ADDITIONAL_CURRENCIES': false, 'SERVICES_API': 'https://mempool.space/api/v1/services', + 'PROD_DOMAINS': [], }; @Injectable({ @@ -131,6 +143,7 @@ export class StateService { latestBlockHeight = -1; blocks: BlockExtended[] = []; mempoolSequence: number; + mempoolBlockState: { block: number, transactions: { [txid: string]: TransactionStripped} }; backend$ = new BehaviorSubject<'esplora' | 'electrum' | 'none'>('esplora'); networkChanged$ = new ReplaySubject(1); @@ -138,12 +151,12 @@ export class StateService { blocksSubject$ = new BehaviorSubject([]); blocks$: Observable; transactions$ = new BehaviorSubject(null); - conversions$ = new ReplaySubject(1); + conversions$ = new ReplaySubject>(1); bsqPrice$ = new ReplaySubject(1); mempoolInfo$ = new ReplaySubject(1); mempoolBlocks$ = new ReplaySubject(1); mempoolBlockUpdate$ = new Subject(); - liveMempoolBlockTransactions$: Observable<{ [txid: string]: TransactionStripped}>; + liveMempoolBlockTransactions$: Observable<{ block: number, transactions: { [txid: string]: TransactionStripped} }>; accelerations$ = new Subject(); liveAccelerations$: Observable; txConfirmed$ = new Subject<[string, BlockExtended]>(); @@ -158,7 +171,7 @@ export class StateService { mempoolRemovedTransactions$ = new Subject(); multiAddressTransactions$ = new Subject<{ [address: string]: { mempool: Transaction[], confirmed: Transaction[], removed: Transaction[] }}>(); blockTransactions$ = new Subject(); - walletTransactions$ = new Subject>(); + walletTransactions$ = new Subject(); isLoadingWebSocket$ = new ReplaySubject(1); isLoadingMempool$ = new BehaviorSubject(true); vbytesPerSecond$ = new ReplaySubject(1); @@ -205,12 +218,20 @@ export class StateService { const browserWindow = window || {}; // @ts-ignore const browserWindowEnv = browserWindow.__env || {}; + if (browserWindowEnv.PROD_DOMAINS && typeof(browserWindowEnv.PROD_DOMAINS) === 'string') { + browserWindowEnv.PROD_DOMAINS = browserWindowEnv.PROD_DOMAINS.split(','); + } + this.env = Object.assign(defaultEnv, browserWindowEnv); if (defaultEnv.BASE_MODULE !== 'mempool') { this.env.MINING_DASHBOARD = false; } + if (document.location.hostname.endsWith('.onion')) { + this.env.SERVICES_API = 'http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/api/v1/services'; + } + if (this.isBrowser) { this.setNetworkBasedonUrl(window.location.pathname); this.setLightningBasedonUrl(window.location.pathname); @@ -228,33 +249,40 @@ export class StateService { } }); - if (this.referrer === 'https://cash.app/' && window.innerWidth < 850 && window.location.pathname.startsWith('/tx/')) { - this.router.navigate(['/tracker/' + window.location.pathname.slice(4)]); - } - - this.liveMempoolBlockTransactions$ = this.mempoolBlockUpdate$.pipe(scan((transactions: { [txid: string]: TransactionStripped }, change: MempoolBlockUpdate): { [txid: string]: TransactionStripped } => { + this.liveMempoolBlockTransactions$ = this.mempoolBlockUpdate$.pipe(scan((acc: { block: number, transactions: { [txid: string]: TransactionStripped } }, change: MempoolBlockUpdate): { block: number, transactions: { [txid: string]: TransactionStripped } } => { if (isMempoolState(change)) { const txMap = {}; change.transactions.forEach(tx => { txMap[tx.txid] = tx; }); - return txMap; + this.mempoolBlockState = { + block: change.block, + transactions: txMap + }; + return this.mempoolBlockState; } else { change.added.forEach(tx => { - transactions[tx.txid] = tx; + acc.transactions[tx.txid] = tx; }); change.removed.forEach(txid => { - delete transactions[txid]; + delete acc.transactions[txid]; }); change.changed.forEach(tx => { - if (transactions[tx.txid]) { - transactions[tx.txid].rate = tx.rate; - transactions[tx.txid].acc = tx.acc; + if (acc.transactions[tx.txid]) { + acc.transactions[tx.txid].rate = tx.rate; + acc.transactions[tx.txid].acc = tx.acc; } }); - return transactions; + this.mempoolBlockState = { + block: change.block, + transactions: acc.transactions + }; + return this.mempoolBlockState; } - }, {})); + }, {}), + share() + ); + this.liveMempoolBlockTransactions$.subscribe(); // Emits the full list of pending accelerations each time it changes this.liveAccelerations$ = this.accelerations$.pipe( diff --git a/frontend/src/app/services/theme.service.ts b/frontend/src/app/services/theme.service.ts index 0a0fdc505..6ed9c1027 100644 --- a/frontend/src/app/services/theme.service.ts +++ b/frontend/src/app/services/theme.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; -import { defaultMempoolFeeColors, contrastMempoolFeeColors } from '../app.constants'; -import { StorageService } from './storage.service'; -import { StateService } from './state.service'; +import { defaultMempoolFeeColors, contrastMempoolFeeColors } from '@app/app.constants'; +import { StorageService } from '@app/services/storage.service'; +import { StateService } from '@app/services/state.service'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/time.service.ts b/frontend/src/app/services/time.service.ts new file mode 100644 index 000000000..e4804deab --- /dev/null +++ b/frontend/src/app/services/time.service.ts @@ -0,0 +1,266 @@ +import { Injectable } from '@angular/core'; +import { DatePipe } from '@angular/common'; +import { dates } from '@app/shared/i18n/dates'; + +const intervals = { + year: 31536000, + month: 2592000, + week: 604800, + day: 86400, + hour: 3600, + minute: 60, + second: 1 +}; + +const precisionThresholds = { + year: 100, + month: 18, + week: 12, + day: 31, + hour: 48, + minute: 90, + second: 90 +}; + +@Injectable({ + providedIn: 'root' +}) +export class TimeService { + + constructor(private datePipe: DatePipe) {} + + calculate( + time: number, + kind: 'plain' | 'since' | 'until' | 'span' | 'before' | 'within', + relative: boolean = false, + precision: number = 0, + minUnit: 'year' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second' = 'second', + showTooltip: boolean = false, + units: string[] = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second'], + dateString?: string, + lowercaseStart: boolean = false, + numUnits: number = 1, + fractionDigits: number = 0, + ): { text: string, tooltip: string } { + if (time == null) { + return { text: '', tooltip: '' }; + } + + let seconds: number; + let tooltip: string = ''; + switch (kind) { + case 'since': + seconds = Math.floor((+new Date() - +new Date(dateString || time * 1000)) / 1000); + tooltip = this.datePipe.transform(new Date(dateString || time * 1000), 'yyyy-MM-dd HH:mm') || ''; + break; + case 'until': + case 'within': + seconds = (+new Date(time) - +new Date()) / 1000; + tooltip = this.datePipe.transform(new Date(time), 'yyyy-MM-dd HH:mm') || ''; + break; + default: + seconds = Math.floor(time); + tooltip = ''; + } + + if (!showTooltip || relative) { + tooltip = ''; + } + + if (seconds < 1 && kind === 'span') { + return { tooltip, text: $localize`:@@date-base.immediately:Immediately` }; + } else if (seconds < 60) { + if (relative || kind === 'since') { + if (lowercaseStart) { + return { tooltip, text: $localize`:@@date-base.just-now:Just now`.charAt(0).toLowerCase() + $localize`:@@date-base.just-now:Just now`.slice(1) }; + } + return { tooltip, text: $localize`:@@date-base.just-now:Just now` }; + } else if (kind === 'until' || kind === 'within') { + seconds = 60; + } + } + + let counter: number; + const result: string[] = []; + let usedUnits = 0; + for (const [index, unit] of units.entries()) { + let precisionUnit = units[Math.min(units.length - 1, index + precision)]; + counter = Math.floor(seconds / intervals[unit]); + const precisionCounter = Math.round(seconds / intervals[precisionUnit]); + if (precisionCounter > precisionThresholds[precisionUnit]) { + precisionUnit = unit; + } + if (units.indexOf(precisionUnit) === units.indexOf(minUnit)) { + counter = Math.max(1, counter); + } + if (counter > 0) { + let rounded; + const roundFactor = Math.pow(10,fractionDigits || 0); + if ((kind === 'until' || kind === 'within') && usedUnits < numUnits) { + rounded = Math.floor((seconds / intervals[precisionUnit]) * roundFactor) / roundFactor; + } else { + rounded = Math.round((seconds / intervals[precisionUnit]) * roundFactor) / roundFactor; + } + if ((kind !== 'until' && kind !== 'within')|| numUnits === 1) { + return { tooltip, text: this.formatTime(kind, precisionUnit, rounded) }; + } else { + if (!usedUnits) { + result.push(this.formatTime(kind, precisionUnit, rounded)); + } else { + result.push(this.formatTime('', precisionUnit, rounded)); + } + seconds -= (rounded * intervals[precisionUnit]); + usedUnits++; + if (usedUnits >= numUnits) { + return { tooltip, text: result.join(', ') }; + } + } + } + } + return { tooltip, text: result.join(', ') }; + } + + private formatTime(kind, unit, number): string { + const dateStrings = dates(number); + switch (kind) { + case 'since': + if (number === 1) { + switch (unit) { // singular (1 day) + case 'year': return $localize`:@@time-since:${dateStrings.i18nYear}:DATE: ago`; break; + case 'month': return $localize`:@@time-since:${dateStrings.i18nMonth}:DATE: ago`; break; + case 'week': return $localize`:@@time-since:${dateStrings.i18nWeek}:DATE: ago`; break; + case 'day': return $localize`:@@time-since:${dateStrings.i18nDay}:DATE: ago`; break; + case 'hour': return $localize`:@@time-since:${dateStrings.i18nHour}:DATE: ago`; break; + case 'minute': return $localize`:@@time-since:${dateStrings.i18nMinute}:DATE: ago`; break; + case 'second': return $localize`:@@time-since:${dateStrings.i18nSecond}:DATE: ago`; break; + } + } else { + switch (unit) { // plural (2 days) + case 'year': return $localize`:@@time-since:${dateStrings.i18nYears}:DATE: ago`; break; + case 'month': return $localize`:@@time-since:${dateStrings.i18nMonths}:DATE: ago`; break; + case 'week': return $localize`:@@time-since:${dateStrings.i18nWeeks}:DATE: ago`; break; + case 'day': return $localize`:@@time-since:${dateStrings.i18nDays}:DATE: ago`; break; + case 'hour': return $localize`:@@time-since:${dateStrings.i18nHours}:DATE: ago`; break; + case 'minute': return $localize`:@@time-since:${dateStrings.i18nMinutes}:DATE: ago`; break; + case 'second': return $localize`:@@time-since:${dateStrings.i18nSeconds}:DATE: ago`; break; + } + } + break; + case 'until': + if (number === 1) { + switch (unit) { // singular (In ~1 day) + case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYear}:DATE:`; break; + case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonth}:DATE:`; break; + case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeek}:DATE:`; break; + case 'day': return $localize`:@@time-until:In ~${dateStrings.i18nDay}:DATE:`; break; + case 'hour': return $localize`:@@time-until:In ~${dateStrings.i18nHour}:DATE:`; break; + case 'minute': return $localize`:@@time-until:In ~${dateStrings.i18nMinute}:DATE:`; + case 'second': return $localize`:@@time-until:In ~${dateStrings.i18nSecond}:DATE:`; + } + } else { + switch (unit) { // plural (In ~2 days) + case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYears}:DATE:`; break; + case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonths}:DATE:`; break; + case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeeks}:DATE:`; break; + case 'day': return $localize`:@@time-until:In ~${dateStrings.i18nDays}:DATE:`; break; + case 'hour': return $localize`:@@time-until:In ~${dateStrings.i18nHours}:DATE:`; break; + case 'minute': return $localize`:@@time-until:In ~${dateStrings.i18nMinutes}:DATE:`; break; + case 'second': return $localize`:@@time-until:In ~${dateStrings.i18nSeconds}:DATE:`; break; + } + } + break; + case 'within': + if (number === 1) { + switch (unit) { // singular (In ~1 day) + case 'year': return $localize`:@@time-within:within ~${dateStrings.i18nYear}:DATE:`; break; + case 'month': return $localize`:@@time-within:within ~${dateStrings.i18nMonth}:DATE:`; break; + case 'week': return $localize`:@@time-within:within ~${dateStrings.i18nWeek}:DATE:`; break; + case 'day': return $localize`:@@time-within:within ~${dateStrings.i18nDay}:DATE:`; break; + case 'hour': return $localize`:@@time-within:within ~${dateStrings.i18nHour}:DATE:`; break; + case 'minute': return $localize`:@@time-within:within ~${dateStrings.i18nMinute}:DATE:`; + case 'second': return $localize`:@@time-within:within ~${dateStrings.i18nSecond}:DATE:`; + } + } else { + switch (unit) { // plural (In ~2 days) + case 'year': return $localize`:@@time-within:within ~${dateStrings.i18nYears}:DATE:`; break; + case 'month': return $localize`:@@time-within:within ~${dateStrings.i18nMonths}:DATE:`; break; + case 'week': return $localize`:@@time-within:within ~${dateStrings.i18nWeeks}:DATE:`; break; + case 'day': return $localize`:@@time-within:within ~${dateStrings.i18nDays}:DATE:`; break; + case 'hour': return $localize`:@@time-within:within ~${dateStrings.i18nHours}:DATE:`; break; + case 'minute': return $localize`:@@time-within:within ~${dateStrings.i18nMinutes}:DATE:`; break; + case 'second': return $localize`:@@time-within:within ~${dateStrings.i18nSeconds}:DATE:`; break; + } + } + break; + case 'span': + if (number === 1) { + switch (unit) { // singular (1 day) + case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYear}:DATE:`; break; + case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonth}:DATE:`; break; + case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeek}:DATE:`; break; + case 'day': return $localize`:@@time-span:After ${dateStrings.i18nDay}:DATE:`; break; + case 'hour': return $localize`:@@time-span:After ${dateStrings.i18nHour}:DATE:`; break; + case 'minute': return $localize`:@@time-span:After ${dateStrings.i18nMinute}:DATE:`; break; + case 'second': return $localize`:@@time-span:After ${dateStrings.i18nSecond}:DATE:`; break; + } + } else { + switch (unit) { // plural (2 days) + case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYears}:DATE:`; break; + case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonths}:DATE:`; break; + case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeeks}:DATE:`; break; + case 'day': return $localize`:@@time-span:After ${dateStrings.i18nDays}:DATE:`; break; + case 'hour': return $localize`:@@time-span:After ${dateStrings.i18nHours}:DATE:`; break; + case 'minute': return $localize`:@@time-span:After ${dateStrings.i18nMinutes}:DATE:`; break; + case 'second': return $localize`:@@time-span:After ${dateStrings.i18nSeconds}:DATE:`; break; + } + } + break; + case 'before': + if (number === 1) { + switch (unit) { // singular (1 day) + case 'year': return $localize`:@@time-before:${dateStrings.i18nYear}:DATE: before`; break; + case 'month': return $localize`:@@time-before:${dateStrings.i18nMonth}:DATE: before`; break; + case 'week': return $localize`:@@time-before:${dateStrings.i18nWeek}:DATE: before`; break; + case 'day': return $localize`:@@time-before:${dateStrings.i18nDay}:DATE: before`; break; + case 'hour': return $localize`:@@time-before:${dateStrings.i18nHour}:DATE: before`; break; + case 'minute': return $localize`:@@time-before:${dateStrings.i18nMinute}:DATE: before`; break; + case 'second': return $localize`:@@time-before:${dateStrings.i18nSecond}:DATE: before`; break; + } + } else { + switch (unit) { // plural (2 days) + case 'year': return $localize`:@@time-before:${dateStrings.i18nYears}:DATE: before`; break; + case 'month': return $localize`:@@time-before:${dateStrings.i18nMonths}:DATE: before`; break; + case 'week': return $localize`:@@time-before:${dateStrings.i18nWeeks}:DATE: before`; break; + case 'day': return $localize`:@@time-before:${dateStrings.i18nDays}:DATE: before`; break; + case 'hour': return $localize`:@@time-before:${dateStrings.i18nHours}:DATE: before`; break; + case 'minute': return $localize`:@@time-before:${dateStrings.i18nMinutes}:DATE: before`; break; + case 'second': return $localize`:@@time-before:${dateStrings.i18nSeconds}:DATE: before`; break; + } + } + break; + default: + if (number === 1) { + switch (unit) { // singular (1 day) + case 'year': return dateStrings.i18nYear; break; + case 'month': return dateStrings.i18nMonth; break; + case 'week': return dateStrings.i18nWeek; break; + case 'day': return dateStrings.i18nDay; break; + case 'hour': return dateStrings.i18nHour; break; + case 'minute': return dateStrings.i18nMinute; break; + case 'second': return dateStrings.i18nSecond; break; + } + } else { + switch (unit) { // plural (2 days) + case 'year': return dateStrings.i18nYears; break; + case 'month': return dateStrings.i18nMonths; break; + case 'week': return dateStrings.i18nWeeks; break; + case 'day': return dateStrings.i18nDays; break; + case 'hour': return dateStrings.i18nHours; break; + case 'minute': return dateStrings.i18nMinutes; break; + case 'second': return dateStrings.i18nSeconds; break; + } + } + } + return ''; + } +} diff --git a/frontend/src/app/services/websocket.service.ts b/frontend/src/app/services/websocket.service.ts index ba163bdd2..0f5368244 100644 --- a/frontend/src/app/services/websocket.service.ts +++ b/frontend/src/app/services/websocket.service.ts @@ -1,14 +1,14 @@ import { Injectable } from '@angular/core'; import { webSocket, WebSocketSubject } from 'rxjs/webSocket'; -import { WebsocketResponse } from '../interfaces/websocket.interface'; -import { StateService } from './state.service'; -import { Transaction } from '../interfaces/electrs.interface'; +import { WebsocketResponse } from '@interfaces/websocket.interface'; +import { StateService } from '@app/services/state.service'; +import { Transaction } from '@interfaces/electrs.interface'; import { firstValueFrom, Subscription } from 'rxjs'; -import { ApiService } from './api.service'; +import { ApiService } from '@app/services/api.service'; import { take } from 'rxjs/operators'; import { TransferState, makeStateKey } from '@angular/core'; -import { CacheService } from './cache.service'; -import { uncompressDeltaChange, uncompressTx } from '../shared/common.utils'; +import { CacheService } from '@app/services/cache.service'; +import { uncompressDeltaChange, uncompressTx } from '@app/shared/common.utils'; const OFFLINE_RETRY_AFTER_MS = 2000; const OFFLINE_PING_CHECK_AFTER_MS = 30000; @@ -37,6 +37,8 @@ export class WebsocketService { private isTrackingWallet: boolean = false; private trackingWalletName: string; private trackingMempoolBlock: number; + private trackingMempoolBlockNetwork: string; + private stoppingTrackMempoolBlock: any | null = null; private latestGitCommit = ''; private onlineCheckTimeout: number; private onlineCheckTimeoutTwo: number; @@ -220,19 +222,32 @@ export class WebsocketService { this.websocketSubject.next({ 'track-asset': 'stop' }); } - startTrackMempoolBlock(block: number, force: boolean = false) { + startTrackMempoolBlock(block: number, force: boolean = false): boolean { + if (this.stoppingTrackMempoolBlock) { + clearTimeout(this.stoppingTrackMempoolBlock); + } // skip duplicate tracking requests - if (force || this.trackingMempoolBlock !== block) { + if (force || this.trackingMempoolBlock !== block || this.network !== this.trackingMempoolBlockNetwork) { this.websocketSubject.next({ 'track-mempool-block': block }); this.isTrackingMempoolBlock = true; this.trackingMempoolBlock = block; + this.trackingMempoolBlockNetwork = this.network; + return true; } + return false; } - stopTrackMempoolBlock() { - this.websocketSubject.next({ 'track-mempool-block': -1 }); + stopTrackMempoolBlock(): void { + if (this.stoppingTrackMempoolBlock) { + clearTimeout(this.stoppingTrackMempoolBlock); + } this.isTrackingMempoolBlock = false; - this.trackingMempoolBlock = null; + this.stoppingTrackMempoolBlock = setTimeout(() => { + this.stoppingTrackMempoolBlock = null; + this.websocketSubject.next({ 'track-mempool-block': -1 }); + this.trackingMempoolBlock = null; + this.stateService.mempoolBlockState = null; + }, 2000); } startTrackRbf(mode: 'all' | 'fullRbf') { @@ -441,6 +456,7 @@ export class WebsocketService { if (response['projected-block-transactions'].blockTransactions) { this.stateService.mempoolSequence = response['projected-block-transactions'].sequence; this.stateService.mempoolBlockUpdate$.next({ + block: this.trackingMempoolBlock, transactions: response['projected-block-transactions'].blockTransactions.map(uncompressTx), }); } else if (response['projected-block-transactions'].delta) { @@ -449,7 +465,7 @@ export class WebsocketService { this.startTrackMempoolBlock(this.trackingMempoolBlock, true); } else { this.stateService.mempoolSequence = response['projected-block-transactions'].sequence; - this.stateService.mempoolBlockUpdate$.next(uncompressDeltaChange(response['projected-block-transactions'].delta)); + this.stateService.mempoolBlockUpdate$.next(uncompressDeltaChange(this.trackingMempoolBlock, response['projected-block-transactions'].delta)); } } } diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts index 92646af14..0a7f2df02 100644 --- a/frontend/src/app/shared/address-utils.ts +++ b/frontend/src/app/shared/address-utils.ts @@ -1,7 +1,7 @@ import '@angular/localize/init'; -import { ScriptInfo } from './script.utils'; -import { Vin, Vout } from '../interfaces/electrs.interface'; -import { BECH32_CHARS_LW, BASE58_CHARS, HEX_CHARS } from './regex.utils'; +import { ScriptInfo } from '@app/shared/script.utils'; +import { Vin, Vout } from '@interfaces/electrs.interface'; +import { BECH32_CHARS_LW, BASE58_CHARS, HEX_CHARS } from '@app/shared/regex.utils'; export type AddressType = 'fee' | 'empty' @@ -17,6 +17,7 @@ export type AddressType = 'fee' | 'v0_p2wsh' | 'v1_p2tr' | 'confidential' + | 'anchor' | 'unknown' const ADDRESS_PREFIXES = { @@ -188,6 +189,12 @@ export class AddressTypeInfo { const v = vin[0]; this.processScript(new ScriptInfo('scriptpubkey', v.prevout.scriptpubkey, v.prevout.scriptpubkey_asm)); } + } else if (this.type === 'unknown') { + for (const v of vin) { + if (v.prevout?.scriptpubkey === '51024e73') { + this.type = 'anchor'; + } + } } // and there's nothing more to learn from processing inputs for other types } @@ -197,6 +204,10 @@ export class AddressTypeInfo { if (!this.scripts.size) { this.processScript(new ScriptInfo('scriptpubkey', output.scriptpubkey, output.scriptpubkey_asm)); } + } else if (this.type === 'unknown') { + if (output.scriptpubkey === '51024e73') { + this.type = 'anchor'; + } } } @@ -206,4 +217,4 @@ export class AddressTypeInfo { this.isMultisig = { m: script.template['m'], n: script.template['n'] }; } } -} \ No newline at end of file +} diff --git a/frontend/src/app/shared/common.utils.ts b/frontend/src/app/shared/common.utils.ts index 697b11b5e..9b53600c1 100644 --- a/frontend/src/app/shared/common.utils.ts +++ b/frontend/src/app/shared/common.utils.ts @@ -1,5 +1,8 @@ import { MempoolBlockDelta, MempoolBlockDeltaCompressed, MempoolDeltaChange, TransactionCompressed } from "../interfaces/websocket.interface"; -import { TransactionStripped } from "../interfaces/node-api.interface"; +import { TransactionStripped } from "@interfaces/node-api.interface"; +import { AmountShortenerPipe } from "@app/shared/pipes/amount-shortener.pipe"; +import { Router, ActivatedRoute } from '@angular/router'; +const amountShortenerPipe = new AmountShortenerPipe(); export function isMobile(): boolean { return (window.innerWidth <= 767.98); @@ -170,8 +173,9 @@ export function uncompressTx(tx: TransactionCompressed): TransactionStripped { }; } -export function uncompressDeltaChange(delta: MempoolBlockDeltaCompressed): MempoolBlockDelta { +export function uncompressDeltaChange(block: number, delta: MempoolBlockDeltaCompressed): MempoolBlockDelta { return { + block, added: delta.added.map(uncompressTx), removed: delta.removed, changed: delta.changed.map(tx => ({ @@ -183,17 +187,54 @@ export function uncompressDeltaChange(delta: MempoolBlockDeltaCompressed): Mempo }; } -export function insecureRandomUUID(): string { - const hexDigits = '0123456789abcdef'; - const uuidLengths = [8, 4, 4, 4, 12]; - let uuid = ''; - for (const length of uuidLengths) { - for (let i = 0; i < length; i++) { - uuid += hexDigits[Math.floor(Math.random() * 16)]; - } - uuid += '-'; +export function renderSats(value: number, network: string, mode: 'sats' | 'btc' | 'auto' = 'auto'): string { + let prefix = ''; + switch (network) { + case 'liquid': + prefix = 'L'; + break; + case 'liquidtestnet': + prefix = 'tL'; + break; + case 'testnet': + case 'testnet4': + prefix = 't'; + break; + case 'signet': + prefix = 's'; + break; } - return uuid.slice(0, -1); + if (mode === 'btc' || (mode === 'auto' && value >= 1000000)) { + return `${amountShortenerPipe.transform(value / 100000000, 2)} ${prefix}BTC`; + } else { + if (prefix.length) { + prefix += '-'; + } + return `${amountShortenerPipe.transform(value, 2)} ${prefix}sats`; + } +} + +export function sleep$(ms: number): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, ms); + }); +} + +export function handleDemoRedirect(route: ActivatedRoute, router: Router) { + route.queryParams + .subscribe(params => { + if (params.next) { + const path = ['/', '/acceleration', '/mining', '/lightning']; + const index = path.indexOf(params.next); + if (index >= 0) { + const nextPath = path[(index + 1) % path.length]; + setTimeout(() => { window.location.replace(`${params.next}?next=${nextPath}`) }, 15000); + } + } + } + ); } // https://stackoverflow.com/a/60467595 diff --git a/frontend/src/app/shared/components/address-type/address-type.component.html b/frontend/src/app/shared/components/address-type/address-type.component.html index fe4286689..598c21a6e 100644 --- a/frontend/src/app/shared/components/address-type/address-type.component.html +++ b/frontend/src/app/shared/components/address-type/address-type.component.html @@ -20,6 +20,9 @@ @case ('multisig') { bare multisig } + @case ('anchor') { + anchor + } @case (null) { unknown } diff --git a/frontend/src/app/shared/components/address-type/address-type.component.ts b/frontend/src/app/shared/components/address-type/address-type.component.ts index 1a2456c07..d0ae7a8f1 100644 --- a/frontend/src/app/shared/components/address-type/address-type.component.ts +++ b/frontend/src/app/shared/components/address-type/address-type.component.ts @@ -1,5 +1,5 @@ import { Component, Input } from '@angular/core'; -import { AddressTypeInfo } from '../../address-utils'; +import { AddressTypeInfo } from '@app/shared/address-utils'; @Component({ selector: 'app-address-type', diff --git a/frontend/src/app/shared/components/btc/btc.component.ts b/frontend/src/app/shared/components/btc/btc.component.ts index 4e62b07ff..a87be7a4f 100644 --- a/frontend/src/app/shared/components/btc/btc.component.ts +++ b/frontend/src/app/shared/components/btc/btc.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core'; import { Subscription } from 'rxjs'; -import { StateService } from '../../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-btc', diff --git a/frontend/src/app/shared/components/fee-rate/fee-rate.component.ts b/frontend/src/app/shared/components/fee-rate/fee-rate.component.ts index b1d143e7f..9a2565cec 100644 --- a/frontend/src/app/shared/components/fee-rate/fee-rate.component.ts +++ b/frontend/src/app/shared/components/fee-rate/fee-rate.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { StateService } from '../../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-fee-rate', diff --git a/frontend/src/app/shared/components/geolocation/geolocation.component.ts b/frontend/src/app/shared/components/geolocation/geolocation.component.ts index 1a498a1b2..2d9aa684b 100644 --- a/frontend/src/app/shared/components/geolocation/geolocation.component.ts +++ b/frontend/src/app/shared/components/geolocation/geolocation.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnChanges } from '@angular/core'; -import { convertRegion, getFlagEmoji } from '../../common.utils'; +import { convertRegion, getFlagEmoji } from '@app/shared/common.utils'; export interface GeolocationData { country: string; @@ -70,6 +70,12 @@ export class GeolocationComponent implements OnChanges { if (this.type === 'node') { const city = this.data.city ? this.data.city : ''; + // Handle city-states like Singapore or Hong Kong + if (city && city === this.data?.country) { + this.formattedLocation = `${this.data.country} ${getFlagEmoji(this.data.iso)}`; + return; + } + // City this.formattedLocation = `${city}`; diff --git a/frontend/src/app/shared/components/global-footer/global-footer.component.html b/frontend/src/app/shared/components/global-footer/global-footer.component.html index a14232bc5..e327a11de 100644 --- a/frontend/src/app/shared/components/global-footer/global-footer.component.html +++ b/frontend/src/app/shared/components/global-footer/global-footer.component.html @@ -5,7 +5,7 @@
@if (!enterpriseInfo?.footer_img) {

- Explore the full Bitcoin ecosystem - ® + @if (officialMempoolSpace) { + Explore the full Bitcoin ecosystem + ® + } @else { + Be your own explorer + + }

}
@@ -27,29 +32,38 @@
+
+ +
@if (!env.customize?.theme) { - @if (!env.customize?.theme) { -
- +
+ +
} @if (!enterpriseInfo?.footer_img) { -

- Explore the full Bitcoin ecosystem - ® + @if (officialMempoolSpace) { + Explore the full Bitcoin ecosystem + ® + } @else { + Be your own explorer + + }

}
@@ -79,7 +93,7 @@

Networks

Mainnet Explorer

Testnet3 Explorer

-

Testnet4 Explorer beta

+

Testnet4 Explorer

Signet Explorer

Liquid Testnet Explorer

Liquid Explorer

diff --git a/frontend/src/app/shared/components/global-footer/global-footer.component.scss b/frontend/src/app/shared/components/global-footer/global-footer.component.scss index e0daf4f4c..5f8c9f566 100644 --- a/frontend/src/app/shared/components/global-footer/global-footer.component.scss +++ b/frontend/src/app/shared/components/global-footer/global-footer.component.scss @@ -76,6 +76,11 @@ footer .selector { display: inline-block; } +footer .add-margin { + margin-left: 5px; + margin-right: 5px; +} + footer .row.link-tree { max-width: 1140px; margin: 0 auto; @@ -154,7 +159,7 @@ footer .nowrap { display: block; } -@media (min-width: 951px) { +@media (min-width: 1020px) { :host-context(.ltr-layout) .language-selector { float: right !important; } @@ -172,7 +177,24 @@ footer .nowrap { } .services { - @media (min-width: 951px) and (max-width: 1147px) { + @media (min-width: 1300px) { + :host-context(.ltr-layout) .language-selector { + float: right !important; + } + :host-context(.rtl-layout) .language-selector { + float: left !important; + } + + .explore-tagline-desktop { + display: block; + } + + .explore-tagline-mobile { + display: none; + } + } + + @media (max-width: 1300px) { :host-context(.ltr-layout) .services .language-selector { float: none !important; } @@ -248,7 +270,7 @@ footer .nowrap { } -@media (max-width: 950px) { +@media (max-width: 1019px) { .main-logo { width: 220px; @@ -281,13 +303,17 @@ footer .nowrap { margin: 0 auto; } + .enterprise-logo { + max-width: 100%; + } + footer .site-options { float: none; margin-top: 15px; } } -@media (max-width: 1147px) { +@media (max-width: 1300px) { .services.main-logo { width: 220px; diff --git a/frontend/src/app/shared/components/global-footer/global-footer.component.ts b/frontend/src/app/shared/components/global-footer/global-footer.component.ts index 50f9a53d7..2fad96d24 100644 --- a/frontend/src/app/shared/components/global-footer/global-footer.component.ts +++ b/frontend/src/app/shared/components/global-footer/global-footer.component.ts @@ -2,13 +2,13 @@ import { Input, ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit, O import { Router, ActivatedRoute } from '@angular/router'; import { Observable, merge, of, Subject, Subscription } from 'rxjs'; import { tap, takeUntil } from 'rxjs/operators'; -import { Env, StateService } from '../../../services/state.service'; -import { IBackendInfo } from '../../../interfaces/websocket.interface'; -import { LanguageService } from '../../../services/language.service'; -import { NavigationService } from '../../../services/navigation.service'; -import { StorageService } from '../../../services/storage.service'; -import { WebsocketService } from '../../../services/websocket.service'; -import { EnterpriseService } from '../../../services/enterprise.service'; +import { Env, StateService } from '@app/services/state.service'; +import { IBackendInfo } from '@interfaces/websocket.interface'; +import { LanguageService } from '@app/services/language.service'; +import { NavigationService } from '@app/services/navigation.service'; +import { StorageService } from '@app/services/storage.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; @Component({ selector: 'app-global-footer', diff --git a/frontend/src/app/shared/components/sats/sats.component.ts b/frontend/src/app/shared/components/sats/sats.component.ts index 39be66ecd..c9fbc741f 100644 --- a/frontend/src/app/shared/components/sats/sats.component.ts +++ b/frontend/src/app/shared/components/sats/sats.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; import { Subscription } from 'rxjs'; -import { StateService } from '../../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-sats', diff --git a/frontend/src/app/shared/components/testnet-alert/testnet-alert.component.html b/frontend/src/app/shared/components/testnet-alert/testnet-alert.component.html index 8aedc4947..7e87e312b 100644 --- a/frontend/src/app/shared/components/testnet-alert/testnet-alert.component.html +++ b/frontend/src/app/shared/components/testnet-alert/testnet-alert.component.html @@ -5,9 +5,6 @@ @if (stateService.network === 'testnet') { Testnet3 is deprecated, and will soon be replaced by Testnet4 } - @if (stateService.network === 'testnet4') { - Testnet4 is not yet finalized, and may be reset at anytime. - }